日韩性视频-久久久蜜桃-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(分块+二分+树状数组)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 无遮挡裸光屁屁打屁股男男 | 91亚洲网站 | 国产精品一区二区在线免费观看 | 日韩视频免费观看高清 | 欧美色亚洲色 | 国产美女一区二区 | 熟妇高潮一区二区三区在线播放 | 中国av片 | 亚洲国产无码精品 | 魔女鞋交玉足榨精调教 | 色综合天天 | 国产精品sm | 成人免费毛片视频 | 色天天综合 | 亚洲综合图色 | 成人不卡| 最好看的2019中文大全在线观看 | 亚洲性生活网站 | 黄色片网站在线免费观看 | 久久精品在线观看 | 动漫美女放屁 | 免费h片网站 | 欧美日韩一区二区三区国产精品成人 | 欧美激情视频一区二区 | 国产精品3p视频 | 黄色特级视频 | 国产成人无码久久久精品天美传媒 | 黑人玩弄人妻一区二区三区免费看 | 午夜试看120秒 | 会喷水的亲姐姐 | 丁香激情六月 | 五月天国产精品 | 精品国产av鲁一鲁一区 | 最新国产一区 | 国产小视频在线看 | 日韩裸体视频 | 欧美亚洲一区二区在线观看 | 狠狠干天天射 | 精品视频区 | 污视频免费在线观看网站 | 久久免费精品 | 国产第一亚洲 | 17草在线| 国产精品传媒麻豆hd | 日本亲与子乱ay中文 | 午夜精品一区二区三 | 国产乱国产乱老熟300部视频 | 中文字幕日韩专区 | 国产亚洲一区二区在线 | 久久精品视频免费看 | 日韩在线观看免费高清 | 免费午夜视频在线观看 | 亚洲精品乱码久久久久久蜜桃欧美 | 在线观看成人黄色 | 中文字幕人妻熟女人妻a片 麻豆91视频 | 日韩毛片一区二区三区 | 午夜探花视频 | 黄色刺激视频 | 男人添女人囗交视频 | 亚洲视频网址 | 日本污视频在线观看 | 麻豆免费av| 99资源网| 日日摸日日碰夜夜爽av | 国产精品普通话 | 青青青视频在线播放 | 国产午夜av | 亚洲综合免费观看高清完整版在线 | 国产午夜在线视频 | 精久久久久久 | 天堂在线网 | 欧美另类tv | 丝袜诱惑av | 国产一区二 | 天堂网视频在线 | 婷婷伊人五月 | 污视频网站在线观看 | 久热这里只有精品在线 | 久久国产精品久久久久久电车 | 中文字幕制服诱惑 | 国产又黄又大又爽 | 午夜视频在线观看免费视频 | 黄色片网站在线免费观看 | 国产精品一区av | 免费在线观看污网站 | 日韩伦理一区二区 | 成人资源在线观看 | 男女无遮挡免费视频 | 久久久久久色 | 日韩精品亚洲一区 | 国产视频手机在线观看 | 国产在线观看免费高清 | 婷婷丁香社区 | 美女av一区二区 | 色网站入口 | 亚洲福利小视频 | 三浦理惠子av在线播放 | 亚洲永久免费网站 | 欧美一区2区三区4区公司 |