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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU多校1 - 6756 Finding a MEX(分块+二分+树状数组)

發布時間:2024/4/11 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU多校1 - 6756 Finding a MEX(分块+二分+树状数组) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出一個 n 個點和 m 條邊的無向圖,每個點都有一個權值,現在需要執行?q 次操作,每次操作分為兩種類型:

  • 1 pos val :將第 pos 個點的權值修改為 val
  • 2 pos :詢問第 pos 個點相鄰的所有點的權值組成的集合的 mex
  • 題目分析:只能說數據水了,如果數據拉滿 std 的復雜度應該是會 TLE 的

    很顯然的幾個結論是:

  • 設點 u 的度數為 du[ u ] ,則 mex( u ) 的答案一定小于等于 du[ u ]
  • 度數大于等于 sqrt( n?) 的點的個數一定小于等于 sqrt( n ) 個
  • 這樣一來考慮 sqrt 分塊,對于每個度數大于 sqrt( n ) 的結點維護一個樹狀數組,樹狀數組記錄一下相鄰的結點的權值都出現了哪些,這樣就可以二分去統計出 mex 了

    綜上所述,對于操作 1 ,只需要更新?pos 結點周圍所有度數大于 sqrt( n ) 的結點的樹狀數組就好了,因為最多只有 sqrt( n ) 個結點,最壞情況就是這個 pos 結點連接了 sqrt( n ) 個結點,對于每個節點的更新,只需要對樹狀數組進行單點更新,所以最壞的時間復雜度為 sqrt( n ) * log n

    對于操作 2 ,如果 pos 節點的度數小于 sqrt( n ) 的話,直接暴力查詢就好了,時間復雜度為 sqrt( n ) ,如果度數大于等于 sqrt( n ) 的話,就以 logn * logn 的時間復雜度在樹狀數組上二分就可以查詢答案了

    總的時間復雜度為 T * n * sqrt( n ) * logn

    注意,因為對于這個思路來說,只需要對于度數大于等于 sqrt( n ) 建立一個更新 + 查詢都是 log 級別的數據結構即可,也不難想到用 set 維護 0 ~ du[ i ] 內沒有出現的數字,亦或者直接在線段樹上二分,不過前者好像是常數太大,無論如何優化仍然 TLE,后者是因為區間大小問題不方便操作(或許可以用線段樹AC,不過個人感覺樹狀數組來寫這個題目更為簡單)

    代碼:
    ?

    #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> #include<bitset> #include<unordered_map> using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;vector<int>node[N],adj[N],c[N],cnt[N];int n,m,sz;bool vis[N];int a[N];inline int lowbit(int x) {return x&(-x); }void add(int u,int pos,int val) {int du=node[u].size();while(pos<=du){c[u][pos]+=val;pos+=lowbit(pos);} }int ask(int u,int pos) {int ans=0;while(pos){ans+=c[u][pos];pos-=lowbit(pos);}return ans; }void init() {for(int i=0;i<N;i++){adj[i].clear();node[i].clear();cnt[i].clear();c[i].clear();} }int get_mex1(int u)//暴力計算mex {int du=node[u].size();memset(vis,false,du+5);for(auto v:node[u])if(a[v]<=du)vis[a[v]]=true;int mex=0;while(vis[mex])mex++;return mex; }int get_mex2(int u)//樹狀數組計算mex {if(!cnt[u][0])//特判0 return 0;int l=1,r=node[u].size(),mex=-1;while(l<=r){int mid=l+r>>1;if(ask(u,mid)<mid){mex=mid;r=mid-1;}elsel=mid+1;}return mex; }void update(int u,int pre_val,int cur_val)//更新點u的一個相鄰節點由pre_val變為cur_val {int du=node[u].size();if(cur_val<=du){if(!cnt[u][cur_val]&&cur_val)add(u,cur_val,1);cnt[u][cur_val]++;}if(pre_val<=du){cnt[u][pre_val]--;if(!cnt[u][pre_val]&&pre_val)add(u,pre_val,-1);} }int main() { #ifndef ONLINE_JUDGE // freopen("data.in.txt","r",stdin); // freopen("data.out.txt","w",stdout); #endif // ios::sync_with_stdio(false);int w;cin>>w;while(w--){init();scanf("%d%d",&n,&m);sz=sqrt(n);for(int i=1;i<=n;i++)scanf("%d",a+i);while(m--){int u,v;scanf("%d%d",&u,&v);node[u].push_back(v);node[v].push_back(u);}for(int u=1;u<=n;u++)if(node[u].size()>=sz){int du=node[u].size();c[u].resize(du+5);cnt[u].resize(du+5);for(auto v:node[u]){adj[v].push_back(u);if(a[v]<=du){if(!cnt[u][a[v]]&&a[v])//因為樹狀數組是從1開始的,所以對于0我們需要特判add(u,a[v],1);cnt[u][a[v]]++;}}}int q;scanf("%d",&q);while(q--){int op;scanf("%d",&op);if(op==1){int pos,val;scanf("%d%d",&pos,&val);for(auto v:adj[pos])update(v,a[pos],val);a[pos]=val;}else{int pos;scanf("%d",&pos);if(node[pos].size()<sz)printf("%d\n",get_mex1(pos));elseprintf("%d\n",get_mex2(pos));}}}return 0; }

    ?

    總結

    以上是生活随笔為你收集整理的HDU多校1 - 6756 Finding a MEX(分块+二分+树状数组)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 亚洲特黄视频 | 婷婷色网| 大奶一区 | 精品午夜一区二区三区在线观看 | 日本人妻一区 | 国产夜夜嗨 | 亚洲精品无码久久 | 久久国产精品-国产精品 | 国产精品s色 | 欧美日韩一区二区三区视频 | 潮喷失禁大喷水无码 | 亚洲激情偷拍 | 日韩综合| 黄瓜视频在线免费观看 | 久久久久夜夜夜精品国产 | 成人免费黄色大片 | 精品久久网站 | 欧美在线播放视频 | 强videoshd酒醉 | 一级特黄aaa大片 | 亚欧在线 | 婷婷五月综合缴情在线视频 | 亚洲精品中文字幕乱码三区 | av一本在线 | 999国产精品 | 国产精选av | 国产精品你懂的 | 在线观看成人网 | 欧美激情中文字幕 | 成人免费视频观看视频 | 夜夜草 | 欧美日韩国产大片 | 久久综合一区二区 | 青青在线视频 | 成人软件在线观看 | 99久久精品一区二区成人 | 欧美xxxxxx片免费播放软件 | 欧美极品少妇×xxxbbb | 4438全国成人免费 | 9i在线看片成人免费 | 黄色工厂这里只有精品 | 中文字幕人妻熟女人妻a片 麻豆91视频 | 99999精品视频 | 欧美女同视频 | 国产精品50页 | 国产精品久久精品三级 | 久草手机在线观看 | 久久久.com | 久久久久久国产精品三区 | 蜜桃精品久久久久久久免费影院 | 宅男av| 六月激情| 先锋资源久久 | 黄色欧美一级片 | 性生交大片免费看3p | 91羞羞网站| 欧美日韩成人在线视频 | 黄色影音 | 天天操天天干天天爱 | 国产欧美综合一区二区三区 | 狠狠干狠狠搞 | 国产精品久久国产精品 | 好男人在线视频 | 黄色一级片视频 | av在线电影网 | 亚洲av鲁丝一区二区三区 | 国产第99页| 好色视频tv | 欧美日韩在线国产 | 狠狠撸在线 | 国产av第一区 | wwxx日本| 亚洲国产精品久久久 | 最近中文字幕在线免费观看 | 性欧美长视频 | 日本中文字幕视频在线 | 欧美成人精品欧美一级 | 亚洲AV无码成人精品一区 | 国产精品天天av精麻传媒 | 高清av网站 | 亚洲另类色综合网站 | 成人性做爰片免费视频 | 老司机一区二区 | 成人午夜免费视频 | 狠狠干网址 | 精品久久久久久国产 | 久久久久久国产免费a片 | 在线成人中文字幕 | 亚洲欧美小视频 | 97人妻精品一区二区三区免费 | av一区二区不卡 | av免费在线播放 | 椎名空在线播放 | 欧美激情片一区二区 | 福利视频免费 | 精品国产一级片 | 手机免费在线观看av | 校园春色av | 印度午夜性春猛xxx交 |