博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1903 [国家集训队]数颜色 / 维护队列
阅读量:5277 次
发布时间:2019-06-14

本文共 1596 字,大约阅读时间需要 5 分钟。

关于时间复杂度

对于多维莫队的复杂度差不多\(O(n^{\frac{2k-1}{k}})\)

奇偶分类优化

return a.l == b.l ? (a.l & 1) ? a.r
b.r : a.l < b.l;

貌似不会用会变慢的好多,谨慎的用

思路

好久的题目了,之前其实只会点不修改莫队

对带修改的不大会,也就做过这一个题目
今天重新做了一边,算是有了新的认识了

其实是在不修改的莫对上加了一个时间戳

修改时的时候和时间一起移动就好了
虽然复杂度会更高(所以一般莫队待修改就很慢了)

#include 
#include
#include
#include
#include
#define FOR(i,a,b) for(int i=a;i<=b;++i)using namespace std;const int maxn=5e4+7;const int maxm=1e6+7;char s;int n,m,A,B,a[maxn],belong[maxn],vis[maxm],ans;struct node { int x,y,id,tim,ans;}Q[maxn];struct modify { int id,v;}C[maxn];bool cmp1(const node &a,const node &b) { return belong[a.x]==belong[b.x] ? (belong[a.y]==belong[b.y] ? a.tim
'9';s=getchar()) if(s=='-') f=-1; for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0'; return x*f;}void add(int x) { if(!vis[a[x]]) ++ans; ++vis[a[x]];}void delet(int x) { --vis[a[x]]; if(!vis[a[x]]) --ans;}void work(int x,int i){ if(Q[i].x<=C[x].id && C[x].id<=Q[i].y) { --vis[a[C[x].id]]; ++vis[C[x].v]; if(!vis[a[C[x].id]]) --ans; if(vis[C[x].v]==1) ++ans; } swap(C[x].v,a[C[x].id]);}int main() { n=read(),m=read(); int k=sqrt(n)*7; FOR(i,1,n) a[i]=read(); FOR(i,1,n) belong[i]=(i-1)/k+1; FOR(i,1,m) { scanf("%s",&s); if(s=='Q') { Q[++A].id=A; Q[A].tim=B; Q[A].x=read(); Q[A].y=read(); } else { C[++B].id=read(); C[B].v=read(); } } sort(Q+1,Q+1+A,cmp1); int l=1,r=0,ttt=0; FOR(i,1,A) { while(Q[i].x
l) delet(l++); while(Q[i].y>r) add(++r); while(Q[i].y
ttt) work(++ttt,i); while(Q[i].tim

转载于:https://www.cnblogs.com/dsrdsr/p/9898685.html

你可能感兴趣的文章
redis与spring结合错误情况
查看>>
第六章 字节码执行方式--解释执行和JIT
查看>>
字符串方法title()、istitle()
查看>>
yield语句
查看>>
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>
ubuntu server设置时区和更新时间
查看>>
【京东咚咚架构演进】-- 好文收藏
查看>>
【HTML】网页中如何让DIV在网页滚动到特定位置时出现
查看>>
文件序列化
查看>>
jQuery之end()和pushStack()
查看>>
Bootstrap--响应式导航条布局
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>