Codeforces Round 924 (Div. 2) ---- F. Digital Patterns ---- 题解

F. Digital Patterns:

题目描述:

 

思路解析:

要求在一个方块中,任意相邻的方块中他的透明度系数不能相同,这样的方块称为趣味性方块,问这样的方块有多少种。

那么我们可以相当,假设 a1 == a2, 那么每一列的第一行元素都等于第二行元素。  假设b1==b2,那么每一行的第一列元素都等于第二列元素。那么可以想到 a1 != a2, a3!=a2, b1 != b2, b2 != b3,那么就可以组成3*3的趣味性方块,并且其中2*2和1*1方块皆为趣味性方块。那么通过上述分析知道,只有出现相邻元素时,他们便无法组成趣味性方块。那么我们就可以将整个a数组和b数组分为多个区间块。

那么可以发现最后可以利用八个树状数组来维护a b c d这四个数组信息。

代码实现:

import java.util.*;import java.io.*;public class Main {public static void main(String[] args) throws IOException {int t = 1;while (t > 0) {solve();t--;}w.flush();w.close();}static TreeSet<Integer> set[] = new TreeSet[2];static Fenwick[][] fen = new Fenwick[2][4];static int N;static long ans;public static void solve() throws IOException{int n = f.nextInt(); int m = f.nextInt();int q = f.nextInt();ans = 0;for (int i = 0; i < Math.min(n, m); i++) {ans += (long) (n - i) * (m - i);}long[] a = new long[n+1];long[] b = new long[m+1];N = Math.max(n, m);for (int i = 0; i < n; i++) {a[i] = f.nextInt();}for (int i = 0; i < m; i++) {b[i] = f.nextInt();}for (int i = 0; i < 2; i++) {set[i] = new TreeSet<>();for (int j = 0; j < 4; j++) {fen[i][j] = new Fenwick(N+1);}}set[0].add(0); set[0].add(n); set[1].add(0); set[1].add(m);fen[0][0].add(n, 1);fen[0][1].add(n, n);fen[0][2].add(n, S1(n));fen[0][3].add(n, S2(n));fen[1][0].add(m, 1);fen[1][1].add(m, m);fen[1][2].add(m, S1(m));fen[1][3].add(m, S2(m)); // 初始化for (int i = n-1; i > 0; i--) {a[i] -= a[i-1];if (a[i] == 0){insert(0, i);}}for (int i = m-1; i > 0; i--) {b[i] -= b[i-1];if (b[i] == 0){insert(1, i);}}w.println(ans);for (int i = 0; i < q; i++) {int t = f.nextInt(); int l = f.nextInt() - 1; int r = f.nextInt(); int x = f.nextInt();if (x == 0) continue;if (t == 1){if (l > 0){if (a[l] == 0){earse(0, l);}a[l] += x;if (a[l] == 0){insert(0, l);}}if (r < n){if (a[r] == 0){earse(0, r);}a[r] -= x;if (a[r] == 0){insert(0, r);}}}else {if (l > 0){if (b[l] == 0){earse(1, l);}b[l] += x;if (b[l] == 0){insert(1, l);}}if (r < m){if (b[r] == 0){earse(1, r);}b[r] -= x;if (b[r] == 0){insert(1, r);}}}w.println(ans);}}public static void add(int t, int x, int coef){ans +=(long) coef * x * fen[t ^ 1][2].sum(x); // n <= m ans += (long) coef * fen[t ^ 1][3].sum(x);// n <= mans += (long) coef * S2(x) * fen[t ^ 1][0].rangesum(x, N+1); // n > mans +=(long) coef * S1(x) * fen[t ^ 1][1].rangesum(x, N+1);fen[t][0].add(x, coef);fen[t][1].add(x, (long) coef *x);fen[t][2].add(x, coef * S1(x));fen[t][3].add(x, coef * S2(x));}public static void insert(int t, int i){int l = set[t].floor(i);int r = set[t].ceiling(i);set[t].add(i);add(t, r - l, -1);add(t, i - l, 1);add(t, r - i, 1);}public static void earse(int t, int i){set[t].remove(i);int l = set[t].floor(i);int r = set[t].ceiling(i);add(t, r - l, 1);add(t, i - l, -1);add(t, r - i, -1);}public static class Fenwick{int n;long[] a;public Fenwick(int n){this.n = n;a = new long[n];}public void add(int x, long val){for(int i = x+1; i <= n; i += i & -i) a[i-1] += val;}public long sum(int x){long res = 0;for (int i = x; i >= 1; i-= i & -i) {res += a[i-1];}return res;}public long rangesum(int l, int r){return sum(r) - sum(l);}}public static long S1(int x) {return (long) x * (x + 1) / 2;}public static long S2(int x) {return (long) x * (x + 1) * (2L * x + 1) / 6 - (long) x * x * (x+1L) / 2;}static PrintWriter w = new PrintWriter(new OutputStreamWriter(System.out));static Input f = new Input(System.in);static class Input {public BufferedReader reader;public StringTokenizer tokenizer;public Input(InputStream stream) {reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = null;}public String next() throws IOException{while (tokenizer == null || !tokenizer.hasMoreTokens()) {tokenizer = new StringTokenizer(reader.readLine());}return tokenizer.nextToken();}public int nextInt() throws IOException {return Integer.parseInt(next());}public long nextLong() throws IOException {return Long.parseLong(next());}public Double nextDouble() throws IOException {return Double.parseDouble(next());}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ajax!

Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种与服务器交换数据而不需要重新加载整个网页的技术。它之所以不需要安装&#xff0c;是因为它基于Web的现有标准&#xff0c;如JavaScript和XMLHttpRequest&#xff08;XHR&#xff09;对象&#xff0c;这些功…

求交错且分母为阶乘的和(java)

import java.util.*; public class APP1{public static void main(String[] args){double sum0.0;int n0;int flag1;int fm1;Scanner reader new Scanner(System.in);System.out.println("请输入n的值&#xff1a;");nreader.nextInt();for(int i0;i<n;i){fm*i; …

制作debug的rpm的一些问题

简介 gcc -g 会创建符号表,符号表包含了程序中使用的变量名称的列表,关闭所有的优化机制,以便程序执行过程中严格按照原来的C代码进行在编写spec的时,如果不希望生成debug包,则可以加 %define debug_package %{nil} 屏蔽掉在rpmbuild过程中的校验。场景1: spec文件中加%d…

物理页采样内核配置damon和perf

一、安装报错Missing file: arch/x86/boot/bzImage [sudo] password for xmu: arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support sh ./arch/x86/boot/install.sh 5.15.19-htmm-test1 \arch/x86/boot/bzImage System.map "/boot"*** Missing…

Redis中的Lua脚本(二)

Lua脚本 创建排序辅助函数 为了防止带有副作用的函数令脚本产生不一致的数据&#xff0c;Redis对math库的math.random函数和math.randomseed函数进行了替换。对于Lua脚本来说&#xff0c;另一个可能产生不一致数据的地方是哪些带有不确定性质的命令&#xff0c;比如对于一个集…

python爬虫之环境配置(1)

一、安装python &#xff08;1&#xff09;下载python安装包 Python Releases for Windows | Python.org &#xff08;2&#xff09;傻瓜式安装python 安装成功 二、安装PyCharm (1&#xff09;下载安装包 Professional&#xff1a;专业版&#xff08;建议选择专业版&am…

Linux C++ 042-演讲比赛流程管理系统

Linux C 042-演讲比赛流程管理系统 本节关键字&#xff1a;Linux、C、练习项目、演讲比赛流程管理系统 相关库函数&#xff1a;for_each、srand、open、close、write 案例需求 设计一个演讲比赛流程管理系统。 比赛规则&#xff1a; 1.学校举行一场演讲比赛&#xff0c;共…

前端CSS基础4(像素,颜色,字体属性大小复合属性)

前端CSS基础4&#xff08;像素&#xff0c;颜色&#xff0c;字体属性大小复合属性&#xff09; CSS代码编写位置CSS像素CSS颜色CSS常用字体属性和大小字体的复合属性 CSS代码编写位置 在HTML文件的头部使用 <head><style>/* 在这里编写CSS代码 */</style> …

VsCode调试远程服务器上面的Docker容器

第一步 VsCode 连接ssh 下载安装VsCode(Visual Studio Code)&#xff0c;首次安装会提示你安装Chinese(Simplified)中文简体&#xff0c;安装完后重新打开就是汉化界面了。在左边侧边栏找到扩展选项&#xff0c;然后安装Remote Development插件&#xff0c;里面包含了Remote S…

js 逻辑与(短路与)和位与(长路与)

js 逻辑与(短路与)和位与(长路与) 在JavaScript中&#xff0c;&&和&是两个不同的操作符。 (逻辑与)&#xff08;&&&#xff09;&#xff1a;这是最常见的逻辑与操作符&#xff0c;也被称为逻辑与短路操作符。它执行布尔"与"操作&#xff0c;但…

Redis中的Lua脚本(三)

Lua脚本 EVAL命令的实现 EVAL命令的执行过程可以分为以下三个步骤: 1.根据客户端给定的Lua脚本&#xff0c;在Lua环境中定义一个Lua函数2.将客户端给定的脚本保存到lua_scripts字典&#xff0c;等待将来进一步使用3.执行刚刚在Lua环境中定义的函数&#xff0c;以此来执行客户…

前端如何防止接口重复提交

什么是接口重复提交? 接口重复提交指的是在网络通信中,同一个请求被客户端多次发送到服务器端的情况。这种情况可能由于多种原因导致,例如用户在等待期间多次点击提交按钮、网络超时后客户端重新发送请求、客户端发送的请求在网络传输过程中出现重复等。 接口重复提交可能…

数据应用OneID:ID-Mapping Spark GraphX实现

前言 说明 以用户实体为例&#xff0c;ID 类型包含 user_id 和 device_id。当然还有其他类型id。不同id可以获取到的阶段、生命周期均不相同。 device_id 生命周期通常指的是一个设备从首次被识别到不再活跃的整个时间段。 user_id是用户登录之后系统分配的唯一标识&#xff…

Typecho插件改造dplayer为<video> 标签

背景意义,插件脱离依赖,将dplayer 改成视频插入插件 由 [dplayer url"/typecho/usr/uploads/2024/03/2377219763.mp4" pic"" danmu"false" /] 成 <video src"/typecho/usr/uploads/2024/03/2377219763.mp4" controls"true…

【详细介绍下图搜索算法】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估

目录 一、说明 二、Deepset SQUAD是个啥&#xff1f; 三、问答系统&#xff08;QA系统&#xff09;&#xff0c;QA系统在各行业的应用及基本原理 3.1 医疗 3.2 金融 3.3 顾客服务 3.4 教育 3.5 制造业 3.6 法律 3.7 媒体 3.8 政府 四、在不同行业使用QA系统的基本原理 五、关于…

GPS NMEA-0183 协议

一文读懂 GPS NMEA-0183 协议 - 知乎 GPRMC Recommended Minimum Specific GPS/TRANSIT Data&#xff08;RMC&#xff09;推荐定位信息 $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>…

Java中可变个数形参的方法:初学者易懂的指南

Java中可变个数形参的方法&#xff1a;初学者易懂的指南 在Java编程中&#xff0c;可变个数形参&#xff08;Varargs&#xff0c;即variable number of arguments&#xff09;是一个非常实用的特性。它允许我们在定义方法时&#xff0c;指定一个参数可以接受任意数量的值。这对…

Java 合并两个相同的List集合多种方法解析

Java 合并两个相同的List集合多种方法解析 引言1. 使用addAll()方法方法说明 2. 使用concat()方法&#xff08;Java 8及以上版本&#xff09;3. 使用CopyOnWriteArrayList类&#xff08;线程安全场景&#xff09;4. 使用Collections.union()静态方法 引言 在Java编程中&#xf…

基于知识图谱的大学生就业能力评价和职位推荐系统——超详细要点总结(创作不易,还请点赞)

1. 职位节点&#xff08;Position&#xff09;&#xff1a; 软件工程师 数据科学家 系统架构师 网络安全专家 人工智能工程师 嵌入式系统工程师 物联网工程师 大数据工程师 前端/后端开发工程师 云计算工程师 区块链工程师 自然语言处理专家 软件测试工程师 人机交…