装修公司怎么做免费网站,设计网站要多久,做网站需要用到的软件,外贸网站如何做的好题面 解析 这题也就是一个带修改的莫队啊啊#xff01;#xff01; 所以#xff0c;我们只需要在普通莫队上加上一维时间即可。 怎么加呢#xff1f; 只需要记录下每次修改和查询的时间#xff0c; 在左右端点跳跃的同时#xff0c;也将时间跳到询问的时间就行了。 具体看…题面 解析 这题也就是一个带修改的莫队啊啊 所以我们只需要在普通莫队上加上一维时间即可。 怎么加呢 只需要记录下每次修改和查询的时间 在左右端点跳跃的同时也将时间跳到询问的时间就行了。 具体看代码吧 // luogu-judger-enable-o2
#includebits/stdc.h
using namespace std;inline int read(){int sum0,f1;char chgetchar();while(ch9 || ch0){if(ch-)f-1;chgetchar();}while(ch0 ch9){sumsum*10ch-0;chgetchar();}return f*sum;
}struct node{int l,r,id,ti;
}q[100001];
struct chang{int pla/*第几支笔*/,to/*颜色*/;
}c[100001];
int n,m,qsum,csum;
int l,r,timn,gap;
int a[100001],ans0,bl[100001];
int sum[1000001];
int ansn[100001];
char opt[5];bool cmp(node a,node b)
{if(bl[a.l] bl[b.l]){if(bl[a.r] bl[b.r]) return a.ti b.ti;return a.r b.r; }return a.l b.l;
}inline void add(int x){if(!(sum[a[x]])) ans;
}inline void del(int x){if(!(--sum[a[x]])) ans--;
}inline void change(int ti,int i){if(c[ti].plaq[i].lc[ti].plaq[i].r) {if(!(--sum[a[c[ti].pla]])) ans--;if(!(sum[c[ti].to])) ans;}swap(a[c[ti].pla],c[ti].to);
}int main(){//freopen(data12.in,r,stdin);nread();mread();gapn/sqrt(m*2.0/3.0);//gapsqrt(n);for(int i1;in;i) bl[i](i-1)/gap1; for(int i1;in;i) a[i]read();for(int i1;im;i){cinopt;if(opt[0]Q){q[qsum].idqsum;q[qsum].lread();q[qsum].rread();q[qsum].ticsum;}else if(opt[0]R){c[csum].plaread();c[csum].toread();}ansn[q[i].id]ans;}sort(q1,qqsum1,cmp);l1;r0;timn0;for(int i1;iqsum;i){int qlq[i].l,qrq[i].r;int qtimeq[i].ti;while(lql) del(l);while(lql) add(--l); while(rqr) del(r--); while(rqr) add(r);while(timnqtime) change(timn,i);while(timnqtime) change(timn--,i); ansn[q[i].id]ans;}for(int i1;iqsum;i){printf(%d\n,ansn[i]);}return 0;
} 转载于:https://www.cnblogs.com/zsq259/p/10563632.html