2017.9.18 数颜色 思考记录
来源:互联网 发布:淘宝网无线端装修 编辑:程序博客网 时间:2024/06/08 06:23
这个题暴力是不是可以过啊,感觉卡卡常数问题不大、
做这个题需要主席树套树状数组或带改莫队,,处于经济考虑,于是学了带改莫队
其实差不多,主体和普通莫队基本一样,就是多了对修改的暴力处理、、
把修改次数作为第三关键字,放到sort里就好了
码:
#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;#define N 10005int cnt,cnt2,da[N],tong[1000005],sy[N],v[N],ans,n,m,kuai,ksh,i,lin[10005],a,b,l,r,t;char op[5];struct wen{int l,r,tm,tmq,daan,id;}w[N],g[N];bool cmp(wen a,wen b){if(sy[a.l]==sy[b.l]){if(sy[a.r]==sy[b.r]){return a.tm<b.tm;}else return sy[a.r]<sy[b.r];}else return sy[a.l]<sy[b.l];}void calc(int &o,int fx){if(fx==-1){tong[v[o-1]]++;if(tong[v[o-1]]==1)ans++;}else{tong[v[o]]--;if(tong[v[o]]==0)ans--;}o+=fx;}void carc(int &o,int fx){if(fx==-1){tong[v[o]]--;if(tong[v[o]]==0)ans--;}else{tong[v[o+1]]++;if(tong[v[o+1]]==1)ans++;}o+=fx;}void cc(int &o,int fx){if(fx==-1){if(l<=g[o].r&&g[o].l<=r){tong[v[g[o].l]]--;if(tong[v[g[o].l]]==0)ans--;}v[g[o].l]=g[o].tmq;if(l<=g[o].r&&g[o].l<=r){tong[v[g[o].l]]++;if(tong[v[g[o].l]]==1)ans++;}o+=fx;}else{o+=fx;if(l<=g[o].r&&g[o].l<=r){tong[v[g[o].l]]--;if(tong[v[g[o].l]]==0)ans--;}v[g[o].l]=g[o].tm;if(l<=g[o].r&&g[o].l<=r){tong[v[g[o].l]]++;if(tong[v[g[o].l]]==1)ans++;}}}int main(){scanf("%d%d",&n,&m);kuai=pow(n,2.0/3);ksh=n/kuai;for(i=1;i<=n;i++){scanf("%d",&v[i]);lin[i]=v[i];sy[i]=i/kuai;if(i/kuai>ksh)sy[i]=ksh;}for(i=1;i<=m;i++){da[i]=-1;scanf("%s",op);if(op[0]=='Q'){scanf("%d%d",&a,&b);++cnt;w[cnt].id=i;w[cnt].l=a;w[cnt].r=b;w[cnt].tm=cnt2;}else{scanf("%d%d",&a,&b);++cnt2;g[cnt2].l=g[cnt2].r=a;g[cnt2].tm=b;g[cnt2].tmq=lin[a];lin[a]=b;}}sort(w+1,w+1+cnt,cmp);l=0;r=0;t=0;for(i=1;i<=cnt;i++){while(t<w[i].tm)cc(t,1);while(t>w[i].tm)cc(t,-1);while(l<w[i].l)calc(l,1);while(l>w[i].l)calc(l,-1);while(r<w[i].r)carc(r,1);while(r>w[i].r)carc(r,-1);w[i].daan=ans;}for(i=1;i<=m;i++){da[w[i].id]=w[i].daan;}for(i=1;i<=m;i++){ if(da[i]!=-1)printf("%d\n",da[i]);}}
阅读全文
0 0
- 2017.9.18 数颜色 思考记录
- 2017.9.15 最大数maxnumber 思考记录
- 2017.9.29 数三角形 思考记录
- 2017.4.26 组合数问题 思考记录
- 2017.6.3 完全平方数 思考记录
- 2017.9.18 HH的项链 思考记录
- 2017.9.18 鬼谷子的钱袋 思考记录
- 2017.9.4 Nim 思考记录
- 2017.9.6 礼物 思考记录
- 2017.9.6 外星人 思考记录
- 2017.9.7 骑士 思考记录
- 2017.9.9 股票交易 思考记录
- 2017.9.10 ricehub 思考记录
- 2017.9.11 海拔 思考记录
- 2017.9.14 dispatching 思考记录
- 2017.9.14 仪仗队 思考记录
- 2017.9.17 function 思考记录
- 2017.9.17 kamp 思考记录
- jQuery 文件上传插件ajaxFileUpload使用以及onchange问题
- 主题
- 顺序表应用3:元素位置互换之移位算法
- 设计模式六大原则(1):单一职责原则
- 三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法
- 2017.9.18 数颜色 思考记录
- BZOJ 1067 [SCOI 2007] 线段树 解题报告
- 在Eclipse中使用BmobSDK时报错java.lang.UnsatisfiedLinkError:Native method not found
- 火狐Httprequester使用
- Effective Java(避免创建不必要的对象、消除过期的引用对象)
- JS插件:时间日期类
- 移动端遮罩层后方滚动处理
- phantomjs 初见
- 经典重读 | 深度学习方法:卷积神经网络结构变化——Spatial Transformer Networks