题目大意:有$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. PBJVision 快速在应用中集成相机/拍摄功能

    PBJVision 简介 PBJVision, 是一个iOS相机操作的封装库,可以让你的应用快速简单地继承相机相关功能. 项目主页: PBJVision 最新示例:点击下载 注意: 示例需要在真机上运 ...

  2. Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库

    Wuss Weapp 一款高质量,组件齐全,高自定义的微信小程序 UI 组件库 文档 https://phonycode.github.io/wuss-weapp 扫码体验 使用微信扫一扫体验小程序组 ...

  3. springMVC集成logback日志系统

    一.项目结构 项目介绍:maven搭建的web项目,实现Java日志记录功能.其中logback.xml为日志配置文件,spring-mvc-servlet.xml为spring controller ...

  4. JQ常用方法(哈哈)

    1ajax请求 $(function(){   $("#send").click(function(){     $.ajax({     type:"get" ...

  5. ethereum(以太坊)(二)--合约中属性和行为的访问权限

    pragma solidity ^0.4.0; contract Test{ /* 属性的访问权限 priveta public internal defualt internal interlnal ...

  6. SqlServer2008/2005数据库日志收缩

    1.SQL2008数据库USE [master]GOALTER DATABASE 数据库名称 SET RECOVERY SIMPLE WITH NO_WAITALTER DATABASE 数据库名称 ...

  7. tcl之其他命令-eval/source

  8. 细说 unicode 、utf-8 、utf-16、ascii 、gbk 、gb2312

    一.计算机的由来 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为”字节“.再后来,他们又做了一些可以处理这些 ...

  9. sql语句(Oracle和sqlserver)

    查询表的首句:(Oracle) select * from (select a.*, rownum as rn from tab_name a order by col )where rn = 1 o ...

  10. 硬盘安装Windows Server 2008(解决系统盘符变成D盘)

    硬盘安装Windows 2008系统方法 操作系统最好用的无疑是server 2003,但是现在Server 2003支持的软件越来越少,很多是故意不支持Server 2003了, 像php5.5以上 ...