日韩性视频-久久久蜜桃-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九色国产视频 | aa在线| 亚洲日本影院 | 中文字幕在线一区二区三区 | 中文文字幕一区二区三三 | 国产美女视频免费观看下载软件 | 欧美一区二区三区婷婷月色 | 疯狂做受xxxx高潮人妖 | 国产区视频 | 成av人片在线观看www | 亚洲操操操 | 999久久久精品 | 夜夜操女人 | 色哟哟入口 | 人人草人人搞 | 成人免费直播 | 黄色a级片在线观看 | 美女毛毛片| 一区二区免费播放 | 亚洲三级在线看 | 麻豆 国产 | 丰腴饱满的极品熟妇 | 一级视频在线观看 | 国产成人在线播放视频 | 精品久久久久久久久久久久久久久久久 | 中文字幕在线观看第二页 | 亚洲精品视频中文字幕 | 无码人妻av一区二区三区波多野 | 91毛片观看 | 中文字幕欧美激情 | 可以看av的网站 | 青在线视频 | 男人av网站 | 日韩激情第一页 | 黄色成人在线网站 | 亚洲一区免费在线 | 在线免费视频你懂的 | www,av在线| 欧美五月激情 | 二区视频在线观看 | 亚洲av无码久久忘忧草 | 我要色综合天天 | 国产精品人妖 | 人妻互换一区二区激情偷拍 | 精品一区二区三区免费毛片爱 | 毛片在线网站 | 久久国产精品国语对白 | 夜夜操网址 | 二区三区偷拍浴室洗澡视频 | 97超碰在线资源 | 黄色一级欧美 | 欧洲三级视频 | 欧美一区二区三区公司 | 日本打白嫩屁股视频 | 一级特黄a大片免费 | 国产成人精品免费视频 | 国产区欧美区日韩区 | av5566 | 美女啪啪av | a天堂中文| 国产色a | 人妻少妇精品无码专区二区 | 超碰网址 | 日免费视频 | 捆绑最紧bdsm视频 | 91精选视频 | 天堂√在线 | www.av视频在线观看 | 自拍偷拍导航 | 亚洲图色在线 | 欧洲精品一区二区三区 | 波多野吉衣一二三区乱码 | 亚洲第一视频网 | 夜色一区二区三区 | 午夜网址| 亚欧美| av网在线播放 | 国产农村妇女精品 | 香蕉视频91 | 国产精选久久 | 夜夜欢视频 | 亚洲男人天堂2024 | 欧美色图久久 | 一级特黄色片 | 婷婷俺去也 | 九色综合网 | av直播在线观看 | 国产xxxxwwww| 国产成人综合欧美精品久久 | 久久久电影 | 国产一区亚洲二区 | 在线免费观看成人 | 色噜噜狠狠狠综合曰曰曰 | 天天久久久 | 狠狠干五月|