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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

洛谷 - P4168 [Violet]蒲公英(分块+离散化)

發布時間:2024/4/11 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 - P4168 [Violet]蒲公英(分块+离散化) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出一個長度為 n 的數列,再給出 m 次查詢,每次查詢區間 [ l , r ] 內的眾數,要求強制在線

題目分析:對于這個題意來說,如果允許離線的話,完全可以用莫隊當模板題水過去,但強制在線的話就需要考慮如何分塊了

這里只講一下如何實現大藍書上的第二個方法吧

首先設將數列 n 分成 T 塊,每塊的長度為 n / T ,接下來可以預處理出 mode[ l ][ r ] ,代表包含第 l 塊到第 r 塊在內的這段區間上的眾數是多少,時間復雜度為 O( T * T * n/T ) = O( nT ),空間復雜度為 O( T^2 )

然后再預處理出一個 vector 的數組 pos,其中 pos[ val ] 中包含數字 val 出現的所有位置,這樣就能二分查找出 val 在區間 [ l , r ] 上的出現次數了,預處理的時間復雜度為 O( n ) ,空間復雜度為 O( n )

最后對于每次查詢,設 ll 為 l 所在的分塊,rr 為 r 所在的分塊,可以 O( 1 ) 查詢 [ ll + 1 , rr - 1 ] 內的眾數即 mode[ ll + 1 ][ rr - 1 ] ,對于兩端多余的部分,可以暴力遍歷,每次二分查找并維護最大值,時間復雜度為 O( m * n/T?* logn )

根據均值不等式:?nT = m * n/T * logn,解得 T = sqrt( m * logn )

然后分塊亂搞就好啦,注意每個數的范圍比較大,需要離散化一下

在查詢時有個小技巧,因為 mode[ l ][ r ] 的 l?和 r 需要滿足 l <= r ,而當 l = r - 1 時會出現 l + 1 < r - 1 的情況,對于這種情況,我們不妨一起暴力處理,只不過時間復雜度多加了一個常數,但是實現起來卻簡單了不少

代碼:

#include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> #include<cassert> using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=4e4+100;int n,m,t,L[N],R[N],a[N],belong[N],mode[1010][1010],cnt[N];vector<int>disc,pos[N];void build()//分塊 {t=max(1,(int)sqrt(m*log2(n)));//多少塊int block=n/t;//每塊的長度 for(int i=1;i<=t;i++){L[i]=block*(i-1)+1;R[i]=block*i;}if(R[t]<n){t++;L[t]=R[t-1]+1;R[t]=n;}for(int i=1;i<=t;i++)for(int j=L[i];j<=R[i];j++)belong[j]=i; }void discreate()//離散化 {sort(disc.begin(),disc.end());disc.erase(unique(disc.begin(),disc.end()),disc.end());for(int i=1;i<=n;i++)a[i]=lower_bound(disc.begin(),disc.end(),a[i])-disc.begin(); }void init() {for(int i=1;i<=n;i++)pos[a[i]].push_back(i);for(int i=1;i<=t;i++){memset(cnt,0,sizeof(cnt));int mmax=-1,mark=0;for(int j=i;j<=t;j++){for(int k=L[j];k<=R[j];k++){cnt[a[k]]++;if(cnt[a[k]]>mmax||cnt[a[k]]==mmax&&a[k]<mark){mmax=cnt[a[k]];mark=a[k];}}mode[i][j]=mark;}} }int get_num(int l,int r,int val) {return upper_bound(pos[val].begin(),pos[val].end(),r)-lower_bound(pos[val].begin(),pos[val].end(),l); }int query(int l,int r) {int ll=belong[l],rr=belong[r],ans;if(rr-ll<=1){int mmax=-1;for(int i=l;i<=r;i++){int cnt=get_num(l,r,a[i]);if(cnt>mmax||cnt==mmax&&a[i]<ans){mmax=cnt;ans=a[i];}}}else{ans=mode[ll+1][rr-1];int mmax=get_num(l,r,ans);for(int i=l;i<=R[ll];i++){int cnt=get_num(l,r,a[i]);if(cnt>mmax||cnt==mmax&&a[i]<ans){mmax=cnt;ans=a[i];}}for(int i=L[rr];i<=r;i++){int cnt=get_num(l,r,a[i]);if(cnt>mmax||cnt==mmax&&a[i]<ans){mmax=cnt;ans=a[i];}}}return ans; }int main() { #ifndef ONLINE_JUDGE // freopen("input.txt","r",stdin); // freopen("output.txt","w",stdout); #endif // ios::sync_with_stdio(false);scanf("%d%d",&n,&m);build();for(int i=1;i<=n;i++){scanf("%d",a+i);disc.push_back(a[i]);}discreate();init();int pre=0;while(m--){int l,r;scanf("%d%d",&l,&r);l=(l+pre-1)%n+1;r=(r+pre-1)%n+1;if(l>r)swap(l,r);printf("%d\n",pre=disc[query(l,r)]);}return 0; }

?

總結

以上是生活随笔為你收集整理的洛谷 - P4168 [Violet]蒲公英(分块+离散化)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中国videosex高潮hd | 91一起草 | 精品欧美一区二区三区久久久 | 久色视频在线播放 | 婷婷开心激情网 | 亚洲精品视频导航 | 中文字幕 欧美日韩 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 午夜日韩电影 | 青青草免费看 | 成人自拍网 | 亚洲欧美国产高清 | 秋霞自拍 | 欧美不卡在线观看 | 五月开心播播网 | 亚洲人成色777777精品音频 | 国产无遮挡a片又黄又爽 | 欧美成人黑人猛交 | 国产精品欧美亚洲 | 香港日本韩国三级网站 | 亚洲精品乱码久久久久久久久久久久 | 日韩xx视频 | 国产手机在线观看 | 七仙女欲春2一级裸体片 | 国产又粗又长又黄 | 久久无码人妻一区二区三区 | 日本热久久 | 国产99999| 波多野一区 | 魔女鞋交玉足榨精调教 | 国产一区欧美二区 | 无码成人精品区在线观看 | 日日操日日 | 超碰婷婷 | 免费无码国产v片在线观看 三级全黄做爰在线观看 | 免费成人在线播放 | 波多av | 免费国产一区二区 | 蜜桃视频在线观看一区二区 | 天天草天天草 | 亚洲综合久久久 | www.白丝 | 亚洲一区二区黄 | 日韩成人无码影院 | 欧美精品日韩在线观看 | 亚洲青色在线 | 91精品国产色综合久久不8 | 国产精品高潮呻吟久久久久久 | 一级黄色在线 | 波多野结衣在线观看一区二区 | 免费美女av | 午夜电影在线播放 | 亚洲欧美v| www.猫咪av| 五月婷婷久 | 精品欧美一区二区三区久久久 | 日噜噜夜噜噜 | 欧美三区 | 夏目彩春娇喘呻吟高潮迭起 | 欧美一区二区三区网站 | 不卡av免费在线观看 | 亚洲欧美一区二区三区久久 | 贵族女沦为官妓h呻吟 | 久操视频免费看 | 亚洲不卡视频在线观看 | 欧美在线xxxx| 青青操久久 | 亚洲av无码片一区二区三区 | 视频一区 中文字幕 | 制服丝袜av一区二区三区下载 | 久久色视频 | 国精品一区二区三区 | 一区不卡视频 | 三级a毛片| 国产青青草视频 | 天天做天天爱天天做 | 黄色av免费| 冲田杏梨av | www.av日韩| 国产91绿帽单男绿奴 | 少妇荡乳情欲办公室456视频 | 伊人婷婷色 | 精品国产乱码久久久久久郑州公司 | www性欧美 | 丰满女邻居的色诱4hd | 羞羞动漫在线观看 | 污网站免费看 | 久久精品韩国 | 都市激情 亚洲 | 亚洲25p| 久久久久国产精品午夜一区 | 97操操 | 老熟妇高潮一区二区高清视频 | 国产一区二区三区网站 | 正在播放木下凛凛88av | 亚洲爱情岛论坛永久 | 欧美日韩一区二区三区四区五区 | 最近最经典中文mv字幕 | 国产免费黄网站 |