日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 6030. 【GDOI2019模拟2019.2.25】白白的

發(fā)布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 6030. 【GDOI2019模拟2019.2.25】白白的 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Description

Input

Output

Sample Input

4 3
6 0 10 1
1 2
1 0
1 2

Sample Output

1
1
0

Data Constraint

Solution

  • 先一遍歸并排序算出初始答案。

  • 對于 0 操作,我們需要計算改變的那一位對答案的貢獻。

  • 這個就是單點修改+區(qū)間查詢比 x 大的數(shù)的個數(shù),樹狀數(shù)組套權(quán)值線段樹即可(動態(tài)開點)。

  • 對于 1 操作,我們要分裂區(qū)間,可以考慮啟發(fā)式合并,掃短的那邊算貢獻。

  • 但如果用前面的樹套樹來算,這部分復(fù)雜度將達到 O(Qlog3n)O(Q\ log^3n)O(Q?log3n) ,不能接受。

  • 我們發(fā)現(xiàn)由于查詢時查詢的區(qū)間(長的那邊)是固定的,這是一個突破口。

  • 再開一個一維的權(quán)值線段樹來維護就可以了!

  • 每次分裂區(qū)間時將短的那邊多開成一個線段樹(最多 Q 個)即可。

  • 這樣計算復(fù)雜度就是 O(Qlog2n)O(Q\ log^2n)O(Q?log2n) 了。

  • 總時間復(fù)雜度 O((N+Q)log2n)O((N+Q)\ log^2n)O((N+Q)?log2n) ,空間復(fù)雜度 O(Nlog2n)O(N\ log^2n)O(N?log2n) 。

Code

#include<cstdio> #include<set> #include<cctype> using namespace std; typedef long long LL; const int N=150005,inf=1e9+1; struct data {int s,l,r; }f[N*30*17]; int n,q,tot,qx,qy,num; LL ans,cnt; int a[N],b[N],c[N]; int rt[N],rt1[N],bel[N]; LL val[N]; set<int>ss; set<int>::iterator it; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } void solve(int l,int r) {if(l>=r) return;int mid=l+r>>1;solve(l,mid);solve(mid+1,r);int j=l,k=mid+1,s=l-1;while(j<=mid && k<=r)if(b[k]<b[j]){c[++s]=b[k++];cnt+=mid-j+1;}else c[++s]=b[j++];while(j<=mid) c[++s]=b[j++];while(k<=r) c[++s]=b[k++];for(int i=l;i<=r;i++) b[i]=c[i]; } void change(int &v,int l,int r) {if(!v) v=++tot;f[v].s+=qy;if(l==r) return;int mid=l+r>>1;if(qx<=mid) change(f[v].l,l,mid); else change(f[v].r,mid+1,r); } int find(int v,int l,int r) {if(!v) return 0;if(qx<=l && r<=qy) return f[v].s;int mid=l+r>>1,s=0;if(qx<=mid) s=find(f[v].l,l,mid);if(qy>mid) s+=find(f[v].r,mid+1,r);return s; } inline void add(int x,int y) {qx=y,qy=1;while(x<=n){change(rt[x],0,inf);x+=x&-x;} } inline void del(int x,int y) {qx=y,qy=-1;while(x<=n){change(rt[x],0,inf);x+=x&-x;} } inline LL get(int x,int y,int z) {LL s=0;if(y>z) return 0;qx=y,qy=z;while(x){s+=find(rt[x],0,inf);x-=x&-x;}return s; } int main() {freopen("baibaide.in","r",stdin);freopen("baibaide.out","w",stdout);n=read(),q=read();for(int i=1;i<=n;i++) a[i]=b[i]=read();solve(1,n);ss.insert(0);ss.insert(n+1);for(int i=1;i<=n;i++) add(i,a[i]);val[num=1]=ans=cnt;for(int i=1;i<=n;i++){bel[i]=num;qx=a[i],qy=1;change(rt1[num],0,inf);}for(int j=1;j<=q;j++){int op=read(),x=read();if(j>1) x^=ans;it=ss.upper_bound(x);int r=*it,l=*--it;l++,r--;if(!op){int y=read();if(j>1) y^=ans;ans^=val[bel[l]];LL sum=get(x-1,a[x]+1,inf)-get(l-1,a[x]+1,inf);sum+=get(r,0,a[x]-1)-get(x,0,a[x]-1);val[bel[l]]-=sum;del(x,a[x]);qx=a[x],qy=-1;change(rt1[bel[l]],0,inf);a[x]=y;add(x,y);qx=y,qy=1;change(rt1[bel[l]],0,inf);sum=get(x-1,y+1,inf)-get(l-1,y+1,inf);sum+=get(r,0,y-1)-get(x,0,y-1);val[bel[l]]+=sum;ans^=val[bel[l]];}else{ss.insert(x);if(x-l<r-x){int pos=bel[r];for(int i=l;i<=x;i++){qx=a[i],qy=-1;change(rt1[pos],0,inf);}ans^=val[pos];for(int i=l;i<=x;i++){qx=0,qy=a[i]-1;val[pos]-=find(rt1[pos],0,inf);}if(l<x){num++;for(int i=l;i<x;i++) bel[i]=num;for(int i=l;i<x;i++){qx=a[i],qy=1;change(rt1[num],0,inf);}int len=cnt=0;for(int i=l;i<x;i++) b[++len]=a[i];solve(1,len);val[num]=cnt;ans^=cnt;qx=a[x]+1,qy=inf;cnt+=find(rt1[num],0,inf);val[pos]-=cnt;}ans^=val[pos];}else{int pos=bel[l];for(int i=x;i<=r;i++){qx=a[i],qy=-1;change(rt1[pos],0,inf);}ans^=val[pos];for(int i=x;i<=r;i++){qx=a[i]+1,qy=inf;val[pos]-=find(rt1[pos],0,inf);}if(x<r){num++;for(int i=x+1;i<=r;i++) bel[i]=num;for(int i=x+1;i<=r;i++){qx=a[i],qy=1;change(rt1[num],0,inf);}int len=cnt=0;for(int i=x+1;i<=r;i++) b[++len]=a[i];solve(1,len);val[num]=cnt;ans^=cnt;qx=0,qy=a[x]-1;cnt+=find(rt1[num],0,inf);val[pos]-=cnt;}ans^=val[pos];}}printf("%lld\n",ans);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的JZOJ 6030. 【GDOI2019模拟2019.2.25】白白的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产日本欧美在线 | 热热久| 亚洲一区精品在线观看 | 男生插女生的网站 | 91久久精品夜夜躁日日躁欧美 | 黄网站色视频免费观看 | 亚洲乱亚洲乱 | 最新在线中文字幕 | 亚洲在线天堂 | 少妇的被肉日常np | 午夜精品久久久久久久久久久久 | 午夜精品一区二区三区在线播放 | 国产日韩欧美一区二区东京热 | n0659极腔濑亚美莉在线播放播放 | 奇米影视777四色 | 久久在线免费 | 色偷av | 黑人番号| 日本欧美一区二区三区不卡视频 | 色噜噜狠狠一区二区三区果冻 | h视频网站在线观看 | yes4444视频在线观看 | 国产无套在线观看 | 久操热线| 免费看女生裸体视频 | 亚洲天堂8| 欧美人和黑人牲交网站上线 | 亚洲8888| 青娱乐导航| 国产人人爽 | 国产乱码精品一区二三赶尸艳谈 | 免费日韩欧美 | 成人亚洲区 | 少妇一级淫片免费播放 | 国产麻豆乱码精品一区二区三区 | 国产免费www | 免费av不卡在线观看 | 五月天综合在线 | 日本免费看 | 国产精品视频不卡 | 亚洲伦理精品 | 日本不卡视频在线观看 | 成人毛片a | 国产欧美精品一区二区 | 亚洲激情成人 | 久久久精品人妻一区二区三区色秀 | 在线一区二区三区视频 | 精久久久 | 国产麻豆成人 | 精彩久久 | 国产一区啪啪 | 精品国产午夜福利 | 久久久一二三区 | 国产成a人亚洲精v品在线观看 | 欧美日韩一区二区在线播放 | av影库 | 久久电影一区二区 | 国产亚洲精品久久久久丝瓜 | 人人操在线播放 | 北条麻妃久久精品 | 欧美亚洲国产视频 | 欧美精品三级 | 久久亚洲aⅴ无码精品 | 在线观看免费高清 | 亚洲午夜一区二区 | 好紧好爽再浪一点视频 | 国产精品久久久久毛片大屁完整版 | 99色影院 | 精品国产毛片 | 国产黄a三级三级三级 | 日本一级淫片1000部 | 激情视频一区二区 | 亚洲少妇18p| 久久久久久久久久久网站 | 青青草视频污 | 国产视频污 | 精品在线免费视频 | 爱啪啪网站 | 91亚洲国产精品 | 黄色大片毛片 | 久热这里| 天天干夜夜想 | 最新福利在线 | 国产午夜精品一区二区三区 | 中文字幕在线播放不卡 | 99re免费视频 | 在线免费毛片 | 成人自拍视频网 | 成年网站免费在线观看 | 国产91久久精品一区二区 | 自拍偷拍国产视频 | 午夜精品国产精品大乳美女 | 欧美一区二区三区久久成人精品 | 久久久久久无码午夜精品直播 | 丝袜一区二区三区 | 男女黄床上色视频免费的软件 | 中文在线a在线 | 免费福利在线观看 | 性生交大片免费看l |