[Bzoj2120]数颜色
题目链接
如果没有这个修改操作,那么就可以主席树/树状数组乱搞,可以没有如果QAQ。
所以选择莫队来乱搞这个修改操作。
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxm = 1e6 + 10; 4 const int maxn = 133334; 5 typedef long long ll; 6 int a[maxm], p[maxm], now[maxm], color[maxm]; 7 struct Q { 8 int l, r, tim, id; 9 }q[maxm]; 10 struct C { 11 int pos, now, old; 12 }c[maxm]; 13 bool cmp(Q a, Q b) { 14 return p[a.l] == p[b.l] ? (p[a.r] == p[b.r] ? a.tim < b.tim : a.r < b.r) : a.l < b.l; 15 } 16 int Ans, ans[maxm], l, r, t; 17 void revise(int x, int val) { 18 color[x] += val; 19 if (val > 0) 20 Ans += color[x] == 1; 21 if (val < 0) 22 Ans -= color[x] == 0; 23 } 24 void go(int x, int d) { 25 if (l <= x && x <= r) 26 revise(d, 1), revise(a[x], -1); 27 a[x] = d; 28 } 29 int main() { 30 int n, m; 31 scanf("%d%d", &n, &m); 32 Ans = r = t = 0, l = 1; 33 int len = pow(n, 0.666666), lenq = 0, lenc = 0; 34 for (int i = 1; i <= n; i++) 35 scanf("%d", &a[i]), now[i] = a[i], p[i] = i / len + 1; 36 char s[3]; 37 int x, y; 38 for (int i = 1; i <= m; i++) { 39 scanf("%s%d%d", s, &x, &y); 40 if (s[0] == 'Q') ++lenq, q[lenq] = { x, y, lenc, lenq }; 41 if (s[0] == 'R') ++lenc, c[lenc] = { x, y, now[x] }, now[x] = y; 42 } 43 sort(q + 1, q + 1 + lenq, cmp); 44 for (int i = 1; i <= lenq; i++) { 45 while (t < q[i].tim)go(c[t + 1].pos, c[t + 1].now), t++; 46 while (t > q[i].tim)go(c[t].pos, c[t].old), t--; 47 while (l < q[i].l)revise(a[l], -1), l++; 48 while (l > q[i].l)revise(a[l - 1], 1), l--; 49 while (r < q[i].r)revise(a[r + 1], 1), r++; 50 while (r > q[i].r)revise(a[r], -1), r--; 51 ans[q[i].id] = Ans; 52 } 53 for (int i = 1; i <= lenq; i++) 54 printf("%d\n", ans[i]); 55 }
转载于:https://www.cnblogs.com/sainsist/p/11551539.html
[Bzoj2120]数颜色相关推荐
- BZOJ2120 数颜色 【带修改莫队】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 6579 Solved: 2625 [Submit][Status][Discus ...
- python使用matplotlib可视化:设置坐标轴的范围、设置主次坐标轴刻度、坐标轴刻度显示样式、坐标轴刻度数颜色、小数点位数、坐标轴刻度网格线、线条类型、数据点形状标签、文本字体、颜色、大小等
python使用matplotlib可视化:设置坐标轴的范围.设置主次坐标轴刻度.坐标轴刻度显示样式.坐标轴刻度数颜色.小数点位数.坐标轴刻度网格线.线条类型.数据点形状标签.文本字体.颜色.大小等 ...
- The 2020 ICPC Asia Macau Regional Contest J. Jewel Grab(数颜色+链表)
J. Jewel Grab Tartarus _Wallace_ 转化询问:对于一个询问 [s,k],找到一个最长的区间 [s,t],满足区间中出现次数超过一次的元素,的出现次数减一,的和,不超过 k ...
- 2120: 数颜色(带修莫队)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 2120: 数颜色 Time Limit: 6 Sec Memory Limit ...
- 【算法讲20:Dsu on Tree】树上数颜色 | Lomsat gelral
[算法讲20:Dsu on Tree] [例一:树上数颜色] · 暴力做法 · · 考虑优化 · ⌈ D s u o n T r e e ⌋ \lceil Dsu\ on\ Tree\rfloor ⌈ ...
- P3939 数颜色 (权值线段树)
题目链接: P3939 数颜色 大致题意 略 解题思路 权值线段树 对于这个题, 由于询问的是, 对于c颜色, [l, r]区间有多少该颜色的兔子. 相当于每次询问的就是一种颜色的区间查询. 假设颜色 ...
- 莫队入门例题之持久化莫队:2120: 数颜色
·述大意: 多个区间询问,询问[l,r]中颜色的种类数.可以单点修改颜色. ·分析: 莫队可以修改?那不是爆炸了吗. 这类爆炸的问题被称为带修莫队(可持久化莫队). 按照美妙类比思想,可 ...
- 洛谷P3939 数颜色 vector乱搞
洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...
- [国家集训队]数颜色
[国家集训队]数颜色 题解 很水的一道带修莫队板子题. 我们只需要将操作时间看作是当前询问的第三维,排序后跑莫队即可. 三维莫队块长为n23n^{\frac{2}{3}}n32时时间复杂度是最优的, ...
- 【BZOJ2120】数颜色,带修莫队
Time:2016.09.08 Author:xiaoyimi 转载注明出处谢谢 思路: 第一次写带修莫队 感觉还是挺简单的 每一次的修改都是一个时间的变动,即修改一次,时间+1(s) 没有修改的查询 ...
最新文章
- 腾讯的Tendis能否干掉Redis,用了什么牛逼的技术呢?
- BTC行情分析,BCH一枝独秀秀全场
- Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
- Spring IOC实现
- 重新理解@Resource注解
- Python基础(4):类
- 如何在 SAP Fiori Elements List Report 表格工具栏里增添新的自定义按钮
- python二维数组操作_Python二维数组应用与操作
- C++关联容器,STL关联容器
- 成也炒作,败也炒作?孙宇晨遭遇最大信任危机
- 可靠信道传输2.0 2.1 3.0
- PHP弱类型安全问题总结
- 小米手机怎么在图片显示定位服务器,小米浏览器中,图片导致fixed定位的元素无法显示...
- 生活游记——泰国自由行
- 土地日度交易数据2000-2022
- Android之数据统计TalkingData集成
- 伊利诺伊香槟分校计算机排名,伊利诺伊大学香槟分校计算机工程硕士排名第8(2020年TFE Times排名)...
- TikTok干货分享:创作者基金申请流程及常见问题解答
- 算法复杂度和合并果子题解
- 编辑状态打开mysql表,Mysql 数据库 基本操作以及调用(一)