Cogs 1901. [国家集训队2011]数颜色

★★★   输入文件:nt2011_color.in   输出文件:nt2011_color.out   简单对比
时间限制:0.6 s   内存限制:512 MB

【试题来源】

2011中国国家集训队命题答辩

【问题描述】

墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令:
1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。
2、 R P Col 把第P支画笔替换为颜色Col。
为了满足墨墨的要求,你知道你需要干什么了吗?

【输入格式】

第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。
第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。
第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。

【输出格式】

对于每一个Query的询问,你需要在对应的行中给出一个数字,代表第L支画笔到第R支画笔中共有几种不同颜色的画笔。

【样例输入】

6 5
1 2 3 4 5 5
Q 1 4
Q 2 6
R 1 2
Q 1 4
Q 2 6

【样例输出】

4
4
3
4

【数据规模和约定】

对于40%数据,只包含第一类操作(无修改操作),且。  除此之外的20%的数据,N,M≤1000  对于100%的数据,N≤10000,M≤10000,修改操作不多于1000次,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。  时间限制:0.6s
 
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 100050
struct nodeQ{
int l,r,t,id;
}a[maxn];
struct nodeR{
int pos,x,h;
}b[maxn];
bool if_[maxn];
int bel[maxn],ai[maxn],tot,num,ans[maxn],ti[maxn*];
int n,m,size=,now;
int cmp(nodeQ x,nodeQ y){
if(bel[x.l]==bel[y.l]){
if(bel[x.r]==bel[y.r])return x.t<y.t;
return x.r<y.r;
}
return x.l<y.l;
}
inline void change(int x){
int pos=b[x].pos;
if(if_[pos]){
ti[ai[pos]]--;
if(!ti[ai[pos]])now--;
}
b[x].h=ai[pos];
ai[pos]=b[x].x;
if(if_[pos]){
if(!ti[ai[pos]])now++;
ti[ai[pos]]++;
}
}
inline void unchange(int x){
int pos=b[x].pos;
if(if_[pos]){
ti[ai[pos]]--;
if(!ti[ai[pos]])now--;
}
ai[pos]=b[x].h;
if(if_[pos]){
if(!ti[ai[pos]])now++;
ti[ai[pos]]++;
}
}
inline void update(int to,int x){
int pre=ti[ai[to]];
ti[ai[to]]+=x;
if(ti[ai[to]]==&&pre==)now--;
if(ti[ai[to]]==&&pre==)now++;
if(x==)if_[to]=true;
else if_[to]=false;
}
int main(){
//freopen("cola.txt","r",stdin);
freopen("nt2011_color.in","r",stdin);
freopen("nt2011_color.out","w",stdout);
scanf("%d%d",&n,&m);char ch[];int l,r,t;
for(int i=;i<=n;i++)scanf("%d",&ai[i]),bel[i]=(i-)/size+;
for(int i=;i<=m;i++){
scanf("%s%d%d",ch,&l,&r);
if(ch[]=='Q')a[++tot].l=l,a[tot].r=r,a[tot].t=num,a[tot].id=tot;
else b[++num].pos=l,b[num].x=r;
}
sort(a+,a+tot+,cmp);l=,r=,t=,now=;
for(int i=;i<=tot;i++){
while(t<a[i].t)t++,change(t);
while(t>a[i].t)unchange(t),t--;
while(r<a[i].r)r++,update(r,);
while(r>a[i].r)update(r,-),r--;
while(l<a[i].l)update(l,-),l++;
while(l>a[i].l)l--,update(l,);
ans[a[i].id]=now;
}
for(int i=;i<=tot;i++)printf("%d\n",ans[i]);
return ;
}

cogs 1901. [国家集训队2011]数颜色的更多相关文章

  1. COGS.1901.[模板][国家集训队2011]数颜色(带修改莫队)

    题目链接 COGS BZOJ2120 洛谷P1903 /* Add和Subd函数中的vis不能直接设为=1或=0 比如 l=1,r=0 -> l=3,r=5 时,[1,5]的vis标记全都是1 ...

  2. BZOJ 2150 cogs 1861 [国家集训队2011]部落战争

    题目描述 lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土. A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住.lanzerb把 ...

  3. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

  4. [国家集训队][bzoj2120] 数颜色 [带修改莫队]

    题面: 传送门 思路: 这道题和SDOI2009的HH的项链很像,只是多了一个修改 模板套上去呀 莫队学习请戳这里:莫队 Code: #include<iostream> #include ...

  5. AC日记——[国家集训队2011]旅游(宋方睿) cogs 1867

    [国家集训队2011]旅游(宋方睿) 思路: 树链剖分,边权转点权: 线段树维护三个东西,sum,max,min: 当一个区间变成相反数时,sum=-sum,max=-min,min=-max: 来, ...

  6. COGS1882 [国家集训队2011]单选错位

    ★   输入文件:nt2011_exp.in   输出文件:nt2011_exp.out   简单对比时间限制:1 s   内存限制:512 MB [试题来源] 2011中国国家集训队命题答辩 [问题 ...

  7. 1893. [国家集训队2011]等差子序列(bitset)

    ★★   输入文件:nt2011_sequence.in   输出文件:nt2011_sequence.out   简单对比时间限制:0.3 s   内存限制:512 MB [试题来源] 2011中国 ...

  8. happiness[国家集训队2011(吴确)]

    [试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...

  9. 【BZOJ 2120】【国家集训队 2011】【数颜色】(莫队)

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

随机推荐

  1. Appium 1.9.1 启动报错 Fatal TypeError: Class constructor BaseDriver cannot be invoked without 'new'

    安装了appium 1.9.1后一直报错Fatal TypeError: Class constructor BaseDriver cannot be invoked without 'new',无法 ...

  2. python3用pdfminer3k在线读取pdf文件

    import importlib import sys import random from urllib.request import urlopen from urllib.request imp ...

  3. PAT 乙级 1084. 外观数列 (20) 【字符串】

    题目链接 https://www.patest.cn/contests/pat-b-practise/1084 思路 用字符串模拟 然后要注意一点 它是连续的 才并在一起 就比如说 d, d1, d1 ...

  4. property 中的strong 与weak

    strong关键字与retain关似,用了它,引用计数自动+1,用实例更能说明一切 @property (nonatomic, strong) NSString *string1; @property ...

  5. NLP数据集大放送,再也不愁数据了!【上百个哦】

    奉上100多个按字母顺序排列的开源自然语言处理文本数据集列表(原始未结构化的文本数据),快去按图索骥下载数据自己研究吧! 数据集 Apache软件基金会公开邮件档案:截止到2011年7月11日全部公开 ...

  6. 理解Java泛型 通配符 ? 以及其使用

    什么是泛型: 泛型从字面上理解,是指一个类.接口或方法支持多种类型,使之广泛化.一般化和更加通用.Java中使用Object类来定义类型也 能实现泛型,但缺点是造成原类型信息的丢失,在使用中容易造成C ...

  7. 打开Vs2010时,卡在加载工具箱内容 不动了

    我是直接打开Visual Studio 2010,而不是以打开解决方案的方式打开.然后就在左下角显示“正在从包‘Microsoft.VisualStudio.IDE.ToolboxControlsIn ...

  8. SDUT OJ 2616 简单计算

    简单计算 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 某天,XX 给YY 出了一道题,题目是: 给出n 个十进制的数,找出这n ...

  9. SQL语句编写注意问题

    下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍.在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用全表扫描 ...

  10. 让LoadRunner再次走下神坛

    1.        LoadRunner 阻碍了性能测试人员对通信过程的理解我希望做性能测试的人能忘掉这个工具.我们都知道VuGen有录制的功能,其实录制这个功能对于测试来说是个非常不好的选择,就是跟 ...