题目大意:有$n$支画笔,有两个操作

  1. $Q\;l\;r:$询问$[l,r]$中有几种颜色
  2. $R\;p\;Col:$把第$p$支画笔的颜色改成$Col$

题解:带修莫队,分为$n^{\frac{1}{3}}$个块,每个块$n^{\frac{2}{3}}$个元素,复杂度$O(n^{\frac{5}{3}})$

卡点:读入时,修改的时间赋值错

C++ Code:

#include <cstdio>
#include <algorithm>
#define maxn 50010
#define bl(x) (x >> 10)
int n, m, Qcnt, Mcnt;
int C[maxn], ans[maxn], cnt[1000010];
struct Query {
int l, r, t, id;
inline bool operator < (const Query &rhs) const {
return bl(l) == bl(rhs.l) ? (bl(r) == bl(rhs.r) ? t < rhs.t : r < rhs.r) : l < rhs.l;
}
} Q[maxn];
struct Modify {
int pos, t, col;
} M[maxn];
int l = 0, r = 0, p = 0, res = 0;
inline void swap(int &a, int &b) {a ^= b ^= a ^= b;}
void modify(int x) {
if (M[x].pos >= l && M[x].pos <= r) {
res -= --cnt[C[M[x].pos]] == 0;
res += cnt[M[x].col]++ == 0;
}
swap(M[x].col, C[M[x].pos]);
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%d", &C[i]);
for (int i = 1; i <= m; i++) {
char op[10];
scanf("%s", op);
if (*op == 'Q') {
Qcnt++;
scanf("%d%d", &Q[Qcnt].l, &Q[Qcnt].r);
Q[Qcnt].t = i;
Q[Qcnt].id = Qcnt;
} else {
Mcnt++;
scanf("%d%d", &M[Mcnt].pos, &M[Mcnt].col);
M[Mcnt].t = i;
}
}
std::sort(Q + 1, Q + Qcnt + 1);
for (int i = 1; i <= Qcnt; i++) {
while (l > Q[i].l) res += cnt[C[--l]]++ == 0;
while (r < Q[i].r) res += cnt[C[++r]]++ == 0;
while (l < Q[i].l) res -= --cnt[C[l++]] == 0;
while (r > Q[i].r) res -= --cnt[C[r--]] == 0;
while (p < Mcnt && M[p + 1].t <= Q[i].t) modify(++p);
while (p && M[p].t > Q[i].t) modify(p--);
ans[Q[i].id] = res;
}
for (int i = 1; i <= Qcnt; i++) printf("%d\n", ans[i]);
return 0;
}

[洛谷P1903][国家集训队]数颜色的更多相关文章

  1. 洛谷 P1903 [国家集训队]数颜色 解题报告

    P1903 [国家集训队]数颜色 题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1.Q L R代表询问你从第\(L\) ...

  2. BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]

    BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...

  3. ●洛谷P1903 [国家集训队]数颜色

    题链: https://www.luogu.org/problemnew/show/P1903题解: 序列带修莫队, 推荐博客https://www.cnblogs.com/Paul-Guderian ...

  4. 洛谷 P1903 [国家集训队]数颜色 / 维护队列

    墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. \(Q\) \(L\) \(R\) 代表询问你从第L支画笔到第R支画笔中共有几种不同 ...

  5. 洛谷P1903 [国家集训队]数颜色 / 维护队列 ( 带 修 )

    题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...

  6. 洛谷 P1903 [国家集训队]数颜色 / 维护队列 带修莫队

    题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: \(1\). \(Q\) \(L\) \(R\)代表询问你从第\(L\) ...

  7. 洛谷 P1903 [国家集训队]数颜色

    题意简述 给定一个数列,支持两个操作 1.询问l~r有多少不同数字 2.修改某个数字 题解思路 带修莫队 如果修改多了,撤销修改 如果修改少了,进行修改 代码 #include <cmath&g ...

  8. bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)

    P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...

  9. P1903 [国家集训队]数颜色 / 维护队列(莫队区间询问+单点修改)

    题目链接:https://www.luogu.org/problemnew/show/P1903 题目大意:中文题目 具体思路:莫队单点修改+区间询问模板题,在原来的区间询问的基础上,我们要记录当前这 ...

随机推荐

  1. CSU1216: 异或最大值(01Trie树)

    Description 给定一些数,求这些数中两个数的异或值最大的那个值 Input 多组数据.第一行为数字个数n,1 <= n <= 10 ^ 5.接下来n行每行一个32位有符号非负整数 ...

  2. js中document的用法小结

    document常用属性: document.title//设置文档标题,与HTNL中的title标签等价 document.bgColor//设置页面背景颜色 document.fgColor//设 ...

  3. Ansible工作架构和原理

    特性 模块块化调用持定的模块,完成持定任务 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块 支持自定义模块 基于Python语法头现 部署简单,基于python和SSH(默认已 ...

  4. jquery横向手风琴效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. mongdb安装配置

    一.先登录Mongodb官网https://www.mongodb.com/download-center#community 下载   安装包.32.64位的都行. 或者查看我的百度云(使用win7 ...

  6. xml中Node和Element的区别

    本文转载自:http://blog.csdn.net/wcydiyi/article/details/4432636点击打开链接 1.元素(Element)和结点(Node)的区别:         ...

  7. C# 控件置于最顶层、最底层、隐藏、显示

    控件置于最顶层.最底层 pictureBox1.BringToFront();//将控件放置所有控件最前端 pictureBox1.SendToBack();//将控件放置所有控件最底端 控件隐藏.显 ...

  8. python——matplotlib图像的基本处理

    1.绘制图像中的点和线 from PIL import Image from pylab import * im = array(Image.open('E:\Python\meinv.jpg')) ...

  9. 大话循环神经网络(RNN)

      在上一篇文章中,介绍了 卷积神经网络(CNN)的算法原理,CNN在图像识别中有着强大.广泛的应用,但有一些场景用CNN却无法得到有效地解决,例如: 语音识别,要按顺序处理每一帧的声音信息,有些结果 ...

  10. HDFS HA(High Availability)高可用性

    HDFS HA(High Availability)高可用性 参考文献: 官方文档 全文翻译 Hadoop组件之-HDFS(HA实现细节) 这张图片的个人理解 由于NameNode在Hadoop1只有 ...