【BZOJ2120】数颜色
看代码学习好,好学好懂好ac
原题:
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要干什么了吗?
N≤10000,M≤10000,修改操作不多于1000次,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。3
带修改的莫队裸题
额外增加一维表示时间,排序的时候优先级设为最底,然后莫队即可……
贡献什么的很好想,就不说了
注意想清楚时间轴和答案的关系
看代码学习好,好学好懂好ac
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
struct dcd{int x,y,z,id;}b[],c[]; int tt=;
int n,m,a[]; int blck;
int l,r,t=;
int cnt[],nm=;
int ans[];
bool cmp(dcd x,dcd y){
return (x.x/blck==y.x/blck ? (x.y/blck==y.y/blck ? x.z<y.z : x.y<y.y) : x.x<y.x);
}
void chg(int x,int y){
if(l<=x && x<=r){
--cnt[a[x]]; nm-=(!cnt[a[x]]);
a[x]=y;
nm+=(!cnt[a[x]]); ++cnt[a[x]];
}
else a[x]=y;
}
void updt(int x,int y){
nm+=(!cnt[a[x]]); cnt[a[x]]+=y; nm-=(!cnt[a[x]]);
/*cout<<x<<" "<<y<<endl;
for(int i=1;i<=6;++i) cout<<cnt[i]<<" ";
cout<<endl;*/
}
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m; blck=(int)sqrt(n*1.0);
for(int i=;i<=n;++i) a[i]=rd();
char s[];
for(int i=;i<=m;++i){
scanf("%s",s); l=rd(),r=rd();
if(s[]=='Q') b[++tt].z=t,b[tt].x=l,b[tt].y=r,b[tt].id=tt;
else c[++t].x=l,c[t].y=r,c[t].z=a[l],a[l]=r;
}
for(int i=t;i>=;--i) a[c[i].x]=c[i].z;
sort(b+,b+tt+,cmp);
l=,r=,t=;
for(int i=;i<=tt;++i){
while(t<b[i].z) ++t,chg(c[t].x,c[t].y);
while(t>b[i].z) chg(c[t].x,c[t].z),--t;
while(r<b[i].y) ++r,updt(r,);
while(r>b[i].y) updt(r,-),--r;
while(l<b[i].x) updt(l,-),++l;
while(l>b[i].x) --l,updt(l,);
//cout<<i<<endl;
/*cout<<l<<" "<<r<<" "<<t<<" "<<nm<<endl;
for(int j=1;j<=6;++j) cout<<cnt[j]<<" ";
cout<<endl;
for(int j=1;j<=n;++j) cout<<a[j]<<" ";
cout<<endl;*/
ans[b[i].id]=nm;
}
for(int i=;i<=tt;++i) printf("%d\n",ans[i]);
return ;
}
【BZOJ2120】数颜色的更多相关文章
- BZOJ2120 数颜色 【带修莫队】
BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...
- bzoj2120 数颜色 莫队 带修改
[bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- BZOJ2120 数颜色 【带修改莫队】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 6579 Solved: 2625 [Submit][Status][Discus ...
- BZOJ2120 数颜色 —— 待修改莫队
题目链接:https://vjudge.net/problem/HYSBZ-2120 2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: ...
- BZOJ2120 数颜色(树套树)
B. 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令:1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色 ...
- [Bzoj2120]数颜色 (非正解 )(莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 6286 Solved: 2489[Submit][Status][Discuss] ...
- BZOJ2453维护队列&&BZOJ2120数颜色
2016-05-28 11:20:22 共同的思路: 维护某种颜色上一次在哪里出现pre,可以知道当pre<询问的l时更新答案 块内按照pre排序 修改的时候重新O(n)扫一遍,如果和之前的不一 ...
- bzoj2120: 数颜色(BIT套主席树+set/分块)
带修改的 HH的项链. 带修改考虑用BIT套主席树,查区间里有几个不同的数用a[i]上次出现的位置pre[i]<l的数有几个来算就好了. 考虑怎么修改.修改i的时候,我们需要改变i同颜色的后继的 ...
- BZOJ2120 数颜色(带修改莫队)
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- BZOJ2120 数颜色
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成 一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同 ...
随机推荐
- windows下的pycharm配置 linux环境
由于最近学习python的需要,为了方便程序的调试,尝试在Windows下的Pycharm远程连接到虚拟机中Centos下的python环境.(这里我采用的是ssh的远程连接)1.准备工作: 固定ce ...
- 【转】Java迭代:Iterator和Iterable接口
Java迭代 : Iterator和Iterable接口 从英文意思去理解 Iterable :故名思议,实现了这个接口的集合对象支持迭代,是可迭代的.able结尾的表示 能...样,可以做.... ...
- 在ros功能包CMakeLists.txt中获取所在功能包的路径 便于添加第三方库的相对路径
在 ros 功能包中要使用第三方的动态库,将其放在系统默认库路径和使用绝对路径均不可取,这样的话可移植性较差,将该功能包移到其它电脑时要重新配置依赖库的路径,太麻烦了. 于是找到下面这个方法,解决了R ...
- Centos7下mysql5.7.22主从配置
一:服务器配置 1.1修改root密码: ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxx'; 1.2添加远程登陆用户: GRANT ALL PRIV ...
- DevExpress WinForms v18.2新版亮点(八)
买 DevExpress Universal Subscription 免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...
- Positioning
boxPostion.html <html><head> <title>Box Position</title><meta charset=& ...
- Problem A 还会用继承吗?
定义一个Base类,包括1个int类型的属性,以及满足输出格式要求的构造函数.拷贝构造函数和析构函数. 定义Base类的子类Derived,包括1个int类型的属性, 以及满足输出格式要求的构造函数. ...
- ios表单上传图片或文件
http://www.cocoachina.com/bbs/read.php?tid-89985-page-1.html http://www.jianshu.com/p/44629e5bf986 h ...
- ansible暂停模块
pause 在playbook执行的过程中暂停一定时间或者提示用户进行某些操作 常用参数: minutes:暂停多少分钟 seconds:暂停多少秒 prompt:打印一串信息提示用户操作 示例: - ...
- css 1) calc() 函数的使用. 2)box-sizing:border-box
calc() 是一个css 函数, 可以实现.计算 ---------------------------- 1. 每个div宽度是25%; 总共4个div. 同时 前三个div 有 border-r ...