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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

●BZOJ 4408 [Fjoi 2016]神秘数

發(fā)布時(shí)間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ●BZOJ 4408 [Fjoi 2016]神秘数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題鏈

http://www.lydsy.com/JudgeOnline/problem.php?id=4408
題解: 主席樹 首先,對(duì)于一些數(shù)來(lái)說(shuō), 如果可以我們可以使得其中的某些數(shù)能夠拼出 1~ret 那么此時(shí)的ANS(神秘?cái)?shù))= ret+1 然后考慮,如果此時(shí)存在另一個(gè)數(shù)小于等于 ANS,(設(shè)該數(shù)為 x) 則一定可以在原來(lái)的1~ret的基礎(chǔ)上拼出 1~ret+x 即 ANS 可以更新為 ret+x+1 所以具體的操作就是: 每次查詢區(qū)間內(nèi)小于ANS的數(shù)的和(SUM),然后如果SUM大于ANS,則更新ANS為SUM+1。 不斷上述操作直到SUM<ANS為止。 主席數(shù)實(shí)現(xiàn)在序列區(qū)間中查詢權(quán)值區(qū)間的和。 代碼: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 100500 using namespace std; int A[MAXN],tmp[MAXN]; int N,M,tnt; struct CMT{long long sum[MAXN*20];int rt[MAXN],ls[MAXN*20],rs[MAXN*20],sz;void Insert(int v,int &u,int l,int r,int p){u=++sz; ls[u]=ls[v]; rs[u]=rs[v]; sum[u]=sum[v]; sum[u]+=tmp[p];if(l==r) return;int mid=(l+r)>>1;if(p<=mid) Insert(ls[v],ls[u],l,mid,p);else Insert(rs[v],rs[u],mid+1,r,p);}long long Query(int v,int u,int l,int r,int al,int ar){if(al<=l&&r<=ar) return sum[u]-sum[v];int mid=(l+r)>>1; long long ret=0;if(al<=mid) ret+=Query(ls[v],ls[u],l,mid,al,ar);if(mid<ar) ret+=Query(rs[v],rs[u],mid+1,r,al,ar);return ret;}void Build(){for(int i=1;i<=N;i++)Insert(rt[i-1],rt[i],1,tnt,A[i]);} }DT; int main(){ // freopen("/home/noilinux/Documents/Code/BZOJ/4408.in","r",stdin); // printf("BEGIN.\n");scanf("%d",&N);for(int i=1;i<=N;i++)scanf("%d",&A[i]),tmp[i]=A[i];sort(tmp+1,tmp+N+1);tnt=unique(tmp+1,tmp+N+1)-tmp-1;for(int i=1;i<=N;i++)A[i]=lower_bound(tmp+1,tmp+tnt+1,A[i])-tmp;scanf("%d",&M);DT.Build(); long long ANS,ret,p;for(int i=1,l,r;ANS=0,ret=0,i<=M;i++){scanf("%d%d",&l,&r);while(ANS<ret+1){ANS=ret+1;p=upper_bound(tmp+1,tmp+tnt+1,ANS)-tmp-1;ret=DT.Query(DT.rt[l-1],DT.rt[r],1,tnt,1,p);}printf("%lld\n",ANS);}return 0; }

  

轉(zhuǎn)載于:https://www.cnblogs.com/zj75211/p/8092630.html

總結(jié)

以上是生活随笔為你收集整理的●BZOJ 4408 [Fjoi 2016]神秘数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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