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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2019ICPC(徐州) - so easy(并查集+离散化)

發布時間:2024/4/11 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2019ICPC(徐州) - so easy(并查集+离散化) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出一個1~n的序列,然后給出m個操作,每個操作分為下列兩種情況:

  • 1 x:讓數字x不可用
  • 2 x:查詢包括x在內的右側的第一個可用數字
  • 題目分析:因為n給到了1e9,而查詢只有1e6,所以我們必須將數據離散化,我最初的思路是先將1e6個查詢記錄下來,將操作1使用過的數字放到一個有序數列中,離線處理,可以倒著一步步模擬,每次遇到操作1就將其刪除(即加入回原數組中),然后二分查找第一個大于等于它本身的數,我讓隊友模擬的,最后果然這個題目卡了stl的時間,TLE了,然后我就想用vector模擬鏈表寫一下這個題,經過隊友的提醒,發現了這就是一個離散化后的并查集,但我不太會寫,就先用vector正向模擬的這個題目,最后還是以TLE告終,臨比賽結束前半個小時終于有了最終的思路,就是在離散化的時候,將涉及到的x和x+1同時加入到并查集中,這樣正向遍歷一遍詢問,每次遇到刪除就將當前節點的父節點改為下個節點的父節點,遇到詢問就直接輸出該節點的父節點即可

    不過還是需要注意一下離散化后的id和并查集的對應關系,寫那一部分的時候一定要細心想一下,不能對應錯

    還有個細節需要注意一下,因為每次push進去的是點x和點x+1,所以最壞情況會有2e6個點,所以數組要開2e6,開1e6會RE

    題解是說用map并查集維護一條鏈表,不過不能用普通的map,會超時,要用unordered_map,據說是O1的查詢

    補充一下map和unordered_map的區別吧:

    map:

    map內部實現了一個紅黑樹,該結構具有自動排序的功能,因此map內部的所有元素都是有序的,紅黑樹的每一個節點都代表著map的一個元素,因此,對于map進行的查找,刪除,添加等一系列的操作都相當于是對紅黑樹進行這樣的操作,故紅黑樹的效率決定了map的效率。?
    unordered_map:

    unordered_map內部實現了一個哈希表,因此其元素的排列順序是雜亂的,無序的

    其他方法都是一樣的用法

    蒟蒻的代碼:(又臭又長但條理還挺清晰的-.-)

    #include<iostream> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=2e6+100;vector<int>v;int fa[N];int find(int x) {return x==fa[x]?x:fa[x]=find(fa[x]); }struct Node {int op,x; }q[N];int getid(int x) {return lower_bound(v.begin(),v.end(),x)-v.begin(); }int main() { // freopen("input.txt","r",stdin);int n,m;while(scanf("%d%d",&n,&m)!=EOF){v.clear();for(int i=1;i<=m;i++){scanf("%d%d",&q[i].op,&q[i].x);v.push_back(q[i].x);v.push_back(q[i].x+1);}v.push_back(n);sort(v.begin(),v.end());//離散化+去重v.erase(unique(v.begin(),v.end()),v.end());for(int i=0;i<v.size();i++)fa[i]=i;for(int i=1;i<=m;i++){int op=q[i].op;int x=q[i].x;int id=getid(x);if(op==1){fa[id]=find(id+1);}else{printf("%d\n",v[find(id)]);}}}return 0; }

    題解的代碼:順便偷學了一波unordered_map

    #include <bits/stdc++.h>using namespace std; const int maxn = 1e5 + 100; unordered_map<int, int> fa;int findfa(int x) {if (!fa.count(x)) return x;return fa[x] = findfa(fa[x]); }int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout);int n, q;scanf("%d %d", &n, &q);int op, x;while (q--) {scanf("%d %d", &op, &x);if (op == 1) {fa[x] = findfa(x + 1);} else {int ans = findfa(x);if (ans > n) ans = -1;printf("%d\n", ans);}}return 0; }

    ?

    總結

    以上是生活随笔為你收集整理的2019ICPC(徐州) - so easy(并查集+离散化)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 男人天堂视频在线 | 亚洲av日韩精品久久久久久久 | 日日夜夜综合 | 91视频网页| 超91在线| 日韩天堂在线 | 毛片1000部免费看 | 精品国产乱码一区二区三 | 日韩av成人在线观看 | 蜜臀一区二区三区精品免费视频 | 91免费版在线 | 久久综合激情 | 91嫩草欧美久久久九九九 | 日产精品久久久久 | 插我舔内射18免费视频 | 久久综合av | 日本热久久| 老熟妇高潮一区二区高清视频 | 免费在线视频一区 | 久久亚洲精精品中文字幕早川悠里 | 中文字幕69 | 中文字幕日韩三级片 | 久久久久国产精品无码免费看 | 免费黄色看片网站 | 国产第一页视频 | 神马午夜国产 | 一级艳片新婚之夜 | 久久高清无码电影 | 亚洲va欧美va天堂v国产综合 | 成人av免费在线观看 | 王者后宫yin肉h文催眠 | 五月婷在线视频 | 波多野结衣a级片 | 小毛片在线观看 | 亚洲国产精品成人综合 | 中文字幕在线看片 | 一级片中文 | wwwxx国产 | 欧美日韩国产91 | 在线播放毛片 | 亚洲熟妇中文字幕五十中出 | 91色多多 | 黄色大片久久 | 日韩经典一区二区 | 天天色影 | 亚洲成av人片在线观看无码 | 国产98在线| 91亚洲视频在线观看 | 欧美日韩色综合 | 成人在线免费看 | 先锋av在线资源 | 青青草毛片 | 午夜888| 免费黄色在线看 | 欧美aaaaaa | 蜜桃视频久久一区免费观看入口 | 日本免费一区二区三区视频 | 九九色播| 亚洲一区二区三区激情 | 黄色麻豆视频 | 日本xxxx高清| 三级av在线播放 | 老太脱裤让老头玩ⅹxxxx | 久草福利资源在线 | 韩国一级片在线观看 | 国产成人亚洲一区二区 | 久热免费在线视频 | 热@国产 | 清纯唯美亚洲 | www.四虎在线观看 | 国产av精国产传媒 | 日韩欧美一卡二卡 | 亚洲人人夜夜澡人人爽 | 白浆影院 | 性网爆门事件集合av | 日韩麻豆视频 | 欧美黑人又粗又大又爽免费 | 一区二区三区波多野结衣 | 天天天天天天天天干 | 久久久久久久久久久久 | xxx一区二区 | 麻豆网站在线看 | 国产不卡在线观看视频 | 国产成人无码精品久久久性色 | 91官网在线 | 中文字幕无码精品亚洲35 | 蜜臀久久 | 精品国产乱码久久久久久郑州公司 | 四虎黄色网址 | 免费人成网站 | 黄色小视频在线观看免费 | 国产精品18久久久久久vr下载 | 男女午夜爽爽爽 | www.九色.com| 国产一国产二 | 黑森林av| 国产一二区在线观看 | 在线播放国产视频 | 久久99在线 |