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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

P3332-[ZJOI2013]K大数查询【树套树】

發(fā)布時(shí)間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P3332-[ZJOI2013]K大数查询【树套树】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P3332


題目大意

開始nnn個(gè)可以重復(fù)的集合,要求支持操作

  • 1lrc:1\ l\ r\ c:1?l?r?c:ccc加入集合l~rl\sim rlr
  • 2lrk:2\ l\ r\ k:2?l?r?k:查詢l~rl\sim rlr的并集中第kkk大的數(shù)

  • 解題思路

    此題考驗(yàn)選手的卡常能力(

    維護(hù)一個(gè)樹套樹,外面是一個(gè)權(quán)值線段樹,然后每個(gè)節(jié)點(diǎn)套一個(gè)區(qū)間線段樹。然后每次詢問和修改的時(shí)候就只用使用該節(jié)點(diǎn)的線段樹的l~rl\sim rlr段即可。

    然后區(qū)間線段樹需要臨時(shí)開點(diǎn)(廢話

    之后卡常的話用固定標(biāo)記,標(biāo)記不下傳,查詢的時(shí)候再根據(jù)沿路的標(biāo)記來(lái)計(jì)算答案即可。


    codecodecode

    #pragma GCC optimize(2) %:pragma GCC optimize(3) %:pragma GCC optimize("Ofast") %:pragma GCC optimize("inline") %:pragma GCC optimize("-fgcse") %:pragma GCC optimize("-fgcse-lm") %:pragma GCC optimize("-fipa-sra") %:pragma GCC optimize("-ftree-pre") %:pragma GCC optimize("-ftree-vrp") %:pragma GCC optimize("-fpeephole2") %:pragma GCC optimize("-ffast-math") %:pragma GCC optimize("-fsched-spec") %:pragma GCC optimize("unroll-loops") %:pragma GCC optimize("-falign-jumps") %:pragma GCC optimize("-falign-loops") %:pragma GCC optimize("-falign-labels") %:pragma GCC optimize("-fdevirtualize") %:pragma GCC optimize("-fcaller-saves") %:pragma GCC optimize("-fcrossjumping") %:pragma GCC optimize("-fthread-jumps") %:pragma GCC optimize("-funroll-loops") %:pragma GCC optimize("-fwhole-program") %:pragma GCC optimize("-freorder-blocks") %:pragma GCC optimize("-fschedule-insns") %:pragma GCC optimize("inline-functions") %:pragma GCC optimize("-ftree-tail-merge") %:pragma GCC optimize("-fschedule-insns2") %:pragma GCC optimize("-fstrict-aliasing") %:pragma GCC optimize("-fstrict-overflow") %:pragma GCC optimize("-falign-functions") %:pragma GCC optimize("-fcse-skip-blocks") %:pragma GCC optimize("-fcse-follow-jumps") %:pragma GCC optimize("-fsched-interblock") %:pragma GCC optimize("-fpartial-inlining") %:pragma GCC optimize("no-stack-protector") %:pragma GCC optimize("-freorder-functions") %:pragma GCC optimize("-findirect-inlining") %:pragma GCC optimize("-fhoist-adjacent-loads") %:pragma GCC optimize("-frerun-cse-after-loop") %:pragma GCC optimize("inline-small-functions") %:pragma GCC optimize("-finline-small-functions") %:pragma GCC optimize("-ftree-switch-conversion") %:pragma GCC optimize("-foptimize-sibling-calls") %:pragma GCC optimize("-fexpensive-optimizations") %:pragma GCC optimize("-funsafe-loop-optimizations") %:pragma GCC optimize("inline-functions-called-once") %:pragma GCC optimize("-fdelete-null-pointer-checks") #include<cstdio> #include<cstring> #include<algorithm> #define ll long long #define rint register int using namespace std; const int M=5e4+10,N=(5e4)*400+10; int n,m,tot,cnt,b[M],op[M],l[M],r[M],a[M]; int ls[N],rs[N],lazy[N],root[M*2]; ll val[N]; char buf[1<<23],*head=buf;//fread優(yōu)化 inline int read(){int x=0,y=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')y=1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return y?-x:x; } template<typename T> inline T read(){T x=0;int y=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')y=1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return y?-x:x; } void print(int x){if(x<0)putchar('-'),x=-x;if(x>9)print(x/10);putchar(x%10+48); } inline void updata(int &x,int l,int r,int L=1,int R=n){if(!x)x=++cnt;val[x]+=(ll)(min(R,r)-max(L,l)+1);if(l<=L&&R<=r){lazy[x]++;return;}rint mid=(L+R)>>1;if(mid>=l)updata(ls[x],l,r,L,mid);if(r>mid)updata(rs[x],l,r,mid+1,R);return; } inline ll ask(int &x,int l,int r,int L=1,int R=n,ll t=0){if(!x) return (ll)(min(R,r)-max(L,l)+1)*t;if(l<=L&&R<=r)return val[x]+1ll*(min(R,r)-max(L,l)+1)*t;rint mid=(L+R)>>1;ll ans=0;if(mid>=l)ans+=ask(ls[x],l,r,L,mid,t+lazy[x]);if(r>mid)ans+=ask(rs[x],l,r,mid+1,R,t+lazy[x]);return ans; } inline void change(int l,int r,int pos,int L=1,int R=tot,int x=1){updata(root[x],l,r);if(L==R)return;rint mid=(L+R)>>1;if(pos<=mid)change(l,r,pos,L,mid,x<<1);else change(l,r,pos,mid+1,R,x<<1|1);return; } inline int query(int l,int r,ll k,int L=1,int R=tot,int x=1){if(L==R)return b[L];rint mid=(L+R)>>1;ll z=ask(root[x<<1|1],l,r);if(z<k)return query(l,r,k-z,L,mid,x<<1);return query(l,r,k,mid+1,R,x<<1|1); } int main() {freopen("P3332_6.in","r",stdin);freopen("P3332_6.ans","w",stdout); n=read();m=read();for(rint i=1;i<=m;i++){op[i]=read();l[i]=read();r[i]=read();a[i]=read();if(op[i]==1)b[++tot]=a[i];}sort(b+1,b+1+tot);tot=unique(b+1,b+1+tot)-b-1;for(rint i=1;i<=m;i++){if(op[i]==1)a[i]=lower_bound(b+1,b+1+tot,a[i])-b,change(l[i],r[i],a[i]);if(op[i]==2)print(query(l[i],r[i],a[i])),putchar('\n');}return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的P3332-[ZJOI2013]K大数查询【树套树】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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