BSOI4559 -- 【模拟试题】数颜色
来源:互联网 发布:梦冒险知乎 编辑:程序博客网 时间:2024/06/05 05:38
BSOI4559 -- 【模拟试题】数颜色
Description
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令:
1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。
2、 R P Col 把第P支画笔替换为颜色Col。
为了满足墨墨的要求,你知道你需要干什么了吗?
1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。
2、 R P Col 把第P支画笔替换为颜色Col。
为了满足墨墨的要求,你知道你需要干什么了吗?
Input
第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。
第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。
第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。
第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。
第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。
Output
对于每一个Query的询问,你需要在对应的行中给出一个数字,代表第L支画笔到第R支画笔中共有几种不同颜色的画笔。
Sample Input
6 51 2 3 4 5 5Q 1 4Q 2 6R 1 2Q 1 4Q 2 6
Sample Output
4434
Hint
【数据范围】
对于100%的数据,N≤10000,M≤20000,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。
对于100%的数据,N≤10000,M≤20000,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。
借用LYM的代码:
#include<iostream>#include<algorithm>#include<cmath>using namespace std;struct ryl{int a,l,r,i,ti;}a[2000005];struct ry{int pos,col,pre;}b[2000005];int v[2000005],pos[2000005],col[2000005],ans,ct[2000005],n,m,jl,cnt1,cnt2,pre[2000005];int Ans[2000005];int ryll(){int r=0;char c=getchar();while(c<'0'||c>'9')c=getchar();while(c>='0'&&c<='9')r=r*10+c-'0',c=getchar();return r;}bool cmp(ryl p,ryl q){if(pos[p.l]==pos[q.l]){if(p.r==q.r){return p.ti<q.ti;}return p.r<q.r;}return p.l<q.l;}bool cmpi(ryl p,ryl q){return p.i<q.i;}void add(int pos,int x){if(x==-1)v[pos]=0;else v[pos]=1;if(!ct[col[pos]])ans++;ct[col[pos]]+=x;if(!ct[col[pos]])ans--;}int main(){n=ryll();m=ryll();jl=pow(n,2.0/3);for(int i=1;i<=n;i++){pre[i]=col[i]=ryll();pos[i]=(i-1)/jl+1;}for(int i=1;i<=m;i++){char c;cin>>c;int x=ryll(),y=ryll();if(c=='Q'){if(x>y)swap(x,y);cnt1++;a[cnt1].l=x;a[cnt1].r=y;a[cnt1].i=cnt1;a[cnt1].ti=cnt2;}else {cnt2++;b[cnt2].pos=x;b[cnt2].col=y;b[cnt2].pre=pre[x];pre[x]=y;}}sort(a+1,a+cnt1+1,cmp);a[0].ti=0;int l=1,r=0;for(int i=1;i<=cnt1;i++){for(int j=a[i-1].ti+1;j<=a[i].ti;j++){if(v[b[j].pos]){add(b[j].pos,-1);col[b[j].pos]=b[j].col;add(b[j].pos,1);}col[b[j].pos]=b[j].col;}for(int j=a[i-1].ti;j>a[i].ti;j--){if(v[b[j].pos]){add(b[j].pos,-1);col[b[j].pos]=b[j].pre;add(b[j].pos,1);}col[b[j].pos]=b[j].pre;} while(r>a[i].r){add(r--,-1);}while(r<a[i].r){add(++r,1);}while(l>a[i].l){add(--l,1);}while(l<a[i].l){add(l++,-1);}a[i].a=ans;}sort(a+1,a+cnt1+1,cmpi);for(int i=1;i<=cnt1;i++){printf("%d\n",a[i].a);}return 0;}
0 0
- BSOI4559 -- 【模拟试题】数颜色
- mNOIP 模拟赛 day1 T2 数颜色
- [NOIP2017模拟][洛谷3939]数颜色
- BSOJ : 2637 【模拟试题】数独
- 4643 -- 【模拟试题】超级数独
- 历届试题 幸运数 暴力模拟
- CCF模拟试题之中间数
- 面试题47:用位运算模拟两个数相加
- 数颜色
- 数颜色
- CCF计算机软件能力认证模拟试题-出现次数最多的数(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题-有趣的数(Java参考答案学习记录)
- 求中间数:CCF计算机职业资格认证考试模拟试题,编号:201612-1
- 【面试题】剑指offer11--求一个数的指数次方,模拟实现一个pow函数
- CCF计算机软件能力认证模拟试题-出现次数最多的数(Java参考答案学习记录)
- 保护色颜色数
- bzoj 2120: 数颜色
- 【BZOJ2120】数颜色 循环
- 内外网同时上网
- Ubuntu下搭建git服务器步骤
- 饿汉单例和懒汉单例
- MIG初面的Android开发问题总结
- Unity3D 调用C++的Dll代码
- BSOI4559 -- 【模拟试题】数颜色
- 轻松记忆UML类图各种符号
- 生成pch文件路径
- java-httpclient-HTTPS请求
- [C/C++不常见语法特性]_[初级]_[左值-右值-lvalue-rvalue]
- 1042. Shuffling Machine (20)
- [BOI Mokia]
- linux 查看磁盘空间占用情况
- 开发环境设置