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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NEERC 17 Problem I. Interactive Sort

發布時間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NEERC 17 Problem I. Interactive Sort 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NEERC 17 Problem I. Interactive Sort

Solution

當寫了兩倍正解的代碼使用了兩倍于正解的操作步數……

剛開始的想法是求出一個bbb,再求出一個aaa,依次輪換,分別維護當前知道確定值的a,ba,ba,b的有序序列,然后求aaa就在bbb的有序序列里二分,確定大致范圍,再暴力求出當前數的大小并更新bbb中每個數的上下界,求bbb同理。

這樣操作次數應該是O(nlgn)O(nlgn)O(nlgn)的,然而常數太大了……,需要接近40W40W40W次操作。

而正解則是上一個做法的一半。。。
我們依次用上述方法求出每一個bbb,可以發現顯然到最后aaa中的數的上下界相等,可以唯一確定一個aaa,所以大概只需要一半的操作步數了。

時間復雜度O(n2)O(n^2)O(n2),代碼是O(n2lgn)O(n^2lgn)O(n2lgn)的,多一個mapmapmap也沒慢多少。

Code one

#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <cctype> #include <string> #include <cstring> #include <ctime> #include <cassert> #include <string.h> //#include <unordered_set> //#include <unordered_map> //#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B) #define PB(A) push_back(A) #define SIZE(A) ((int)A.size()) #define LEN(A) ((int)A.length()) #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define fi first #define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; } template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll; typedef unsigned long long ull; typedef long double lod; typedef pair<int,int> PR; typedef vector<int> VI;const lod eps=1e-11; const lod pi=acos(-1); const int oo=1<<30; const ll loo=1ll<<62; const int mods=998244353; const int MAXN=600005; const int INF=0x3f3f3f3f;//1061109567 /*--------------------------------------------------------------------*/ int example_a[MAXN],example_b[MAXN]; inline int read() { int x; scanf("%d",&x); return x; } inline char get_ch() { char c=' '; while (c!='<'&&c!='>') scanf("%c",&c); return c; } inline char get_chxy(int x,int y) { return example_a[x]<example_b[y]?'<':'>'; }map<PR,int> Map; int la[MAXN],lb[MAXN],ra[MAXN],rb[MAXN],a[MAXN],b[MAXN],Ansa[MAXN],Ansb[MAXN],ida[MAXN],idb[MAXN],n,Num=0;int get(int x,int y) {if (Map.count(MP(x,y))) return Map[MP(x,y)];printf("? %d %d\n",x,y),fflush(stdout);return Map[MP(x,y)]=(get_ch()=='>'); }PR geta(int x) {int l=1,r=x,L,R;while (l<r){int mid=(l+r+1)>>1;if (get(x,idb[mid])) l=mid;else r=mid-1;}if (!get(x,idb[l])) L=1,R=b[l];else L=b[l],R=(l+1>x?n:b[l+1]);return MP((L&1)?L+1:L,(R&1)?R-1:R); } void solvea(int t) {int num=0;PR x=geta(t); // Num=0;for (int j=1;j<=(n+1)>>1;j++){if (rb[j]<x.fi) num++;if (lb[j]<x.se&&x.fi<rb[j]) num+=get(t,j),Num++;} // cout<<"AQueryNum:"<<Num<<endl;Ansa[t]=a[t]=num<<1,ida[t]=t;for (int j=1;j<=(n+1)>>1;j++)if (Map.count(MP(t,j))) {int p=Map[MP(t,j)];if (!p) upmax(lb[j],Ansa[t]+1);else upmin(rb[j],Ansa[t]-1);}while (t&&a[t]<a[t-1]) swap(a[t],a[t-1]),swap(ida[t],ida[t-1]),t--; }PR getb(int x) {int l=1,r=x-1,L,R;while (l<r){int mid=(l+r)>>1;if (get(ida[mid],x)) r=mid;else l=mid+1;}if (x==1) L=1,R=n;else if (!get(ida[r],x)) L=a[r],R=n;else L=(r==1?1:a[r-1]),R=a[r];return MP((!(L&1))?L+1:L,(!(R&1))?R-1:R); } void solveb(int t) {int num=0;PR x=getb(t); // Num=0;for (int j=1;j<=n>>1;j++){if (ra[j]<x.fi) num++;if (la[j]<x.se&&x.fi<ra[j]) num+=(!get(j,t)),Num++;} // cout<<"BQueryNum:"<<Num<<" "<<x.fi<<" "<<x.se<<endl;Ansb[t]=b[t]=num<<1|1,idb[t]=t;for (int j=1;j<=n>>1;j++)if (Map.count(MP(j,t))) {int p=Map[MP(j,t)];if (!p) upmin(ra[j],Ansb[t]-1);else upmax(la[j],Ansb[t]+1);}while (t&&b[t]<b[t-1]) swap(b[t],b[t-1]),swap(idb[t],idb[t-1]),t--; } signed main() {n=read();srand(time(0));for (int i=1;i<=n>>1;i++) example_a[i]=i*2;for (int i=1;i<=(n+1)>>1;i++) example_b[i]=i*2-1;random_shuffle(example_a+1,example_a+(n>>1)+1);random_shuffle(example_b+1,example_b+((n+1)>>1)+1);for (int i=1;i<=n/2;i++) la[i]=2,ra[i]=n-(n&1);for (int i=1;i<=(n+1)/2;i++) lb[i]=1,rb[i]=n-((n&1)^1);for (int i=1,l,r;i<=n/2;i++) solveb(i),solvea(i);if (n&1) solveb((n+1)>>1);putchar('!');for (int i=1;i<=n/2;i++) printf(" %d",Ansa[i]);for (int i=1;i<=(n+1)/2;i++) printf(" %d",Ansb[i]);fflush(stdout);return 0; }

Code two

#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <cctype> #include <string> #include <cstring> #include <ctime> #include <cassert> #include <string.h> //#include <unordered_set> //#include <unordered_map> //#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B) #define PB(A) push_back(A) #define SIZE(A) ((int)A.size()) #define LEN(A) ((int)A.length()) #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define fi first #define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; } template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll; typedef unsigned long long ull; typedef long double lod; typedef pair<int,int> PR; typedef vector<int> VI;const lod eps=1e-11; const lod pi=acos(-1); const int oo=1<<30; const ll loo=1ll<<62; const int mods=998244353; const int MAXN=600005; const int INF=0x3f3f3f3f;//1061109567 /*--------------------------------------------------------------------*/ int example_a[MAXN],example_b[MAXN]; inline int read() { int x; scanf("%d",&x); return x; } inline char get_ch() { char c=' '; while (c!='<'&&c!='>') scanf("%c",&c); return c; } inline char get_chxy(int x,int y) { return example_a[x]<example_b[y]?'<':'>'; }map<PR,int> Map; int la[MAXN],ra[MAXN],a[MAXN],b[MAXN],Ansb[MAXN],ida[MAXN],f[MAXN],n,Num=0;int get(int x,int y) {if (Map.count(MP(x,y))) return Map[MP(x,y)];printf("? %d %d\n",x,y),fflush(stdout);return Map[MP(x,y)]=(get_ch()=='>'); } PR getb(int x) {int num=0;for (int i=1;i<=n>>1;i++) f[i]=0;for (int i=1;i<=n>>1;i++) f[la[i]>>1]=i;for (int i=1;i<=n>>1;i++) if (f[i]) ida[++num]=f[i],a[num]=la[f[i]],b[num]=ra[f[i]];int l=1,r=num,L,R;while (l<r){Num++;int mid=(l+r)>>1;if (get(ida[mid],x)) r=mid;else l=mid+1;}if (!get(ida[r],x)) L=a[r],R=n;else L=(r==1?1:a[r-1]),R=b[r];return MP((!(L&1))?L+1:L,(!(R&1))?R-1:R); } void solveb(int t) {int num=0;PR x=getb(t);for (int j=1;j<=n>>1;j++){if (ra[j]<x.fi) num++;if (la[j]<x.se&&x.fi<ra[j]) num+=(!get(j,t)),Num++;}Ansb[t]=num<<1|1;for (int j=1;j<=n>>1;j++)if (Map.count(MP(j,t))) {int p=Map[MP(j,t)];if (!p) upmin(ra[j],Ansb[t]-1);else upmax(la[j],Ansb[t]+1);} } signed main() {n=read();if (n==1) { printf("! 1\n"); return 0; }for (int i=1;i<=n/2;i++) la[i]=2,ra[i]=n-(n&1);for (int i=1,l,r;i<=n/2;i++) solveb(i);if (n&1) solveb((n+1)>>1);putchar('!');for (int i=1;i<=n/2;i++) printf(" %d",la[i]);for (int i=1;i<=(n+1)/2;i++) printf(" %d",Ansb[i]);fflush(stdout);return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的NEERC 17 Problem I. Interactive Sort的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 天天操天天干天天爱 | 久久精品网 | 中文视频在线 | 国模私拍一区二区三区 | 国产成人精品aa毛片 | babes性欧美69| www日韩精品 | 欧美成人午夜77777 | 色多多入口 | av在线电影网站 | 一级片免费网址 | 久久影院中文字幕 | 国产精品视频免费看 | 日本中文字幕在线视频 | 亚洲欧美国产日韩精品 | 杨幂一区二区国产精品 | 免费在线a| 日本丰满熟妇bbxbbxhd | 中文字幕少妇在线三级hd | 免费看黄网站在线 | 日韩欧美专区 | 激情a| 日韩中文字幕在线观看 | 动漫美女舌吻 | 国产一区二区在线播放 | 国产精品久久久久久久久 | 在线sese| 精品欧美一区二区精品少妇 | 欧美成人不卡 | 欧美做受 | 国产成人精品三级麻豆 | 天堂av亚洲av国产av电影 | 午夜视频免费在线观看 | 国产一区精品久久 | 777精品| 99国产精品久久久久久久 | 艳妇乳肉豪妇荡乳xxx | 免费看成人啪啪 | 国产又粗又长视频 | 午夜激情在线视频 | 国产经典一区二区 | 亚洲国产精品视频一区二区 | 99福利视频导航 | 日批黄色 | 天天干网站 | 91字幕网| 国产精品一区二区无线 | 都市激情 自拍偷拍 | 特级毛片在线播放 | 国产模特av私拍大尺度 | 精品无码久久久久久久久成人 | 亚洲永久精品视频 | 国产欧美日韩精品一区 | 欧美影视一区二区 | xxxx日本少妇| 久久小草 | 国产一区二区三区在线视频观看 | 黄色av一级片 | 色欲AV无码精品一区二区久久 | 中文字幕日韩精品在线观看 | 亚洲黄网在线观看 | 91麻豆国产精品 | 国产三级在线免费观看 | 手机在线亚洲 | 97日韩精品 | 天天摸夜夜操 | av播播 | 久久丝袜美腿 | 伊人狠狠操 | 成人一区二区三区视频 | 无遮挡又爽又刺激的视频 | 毛片在线视频 | 成人午夜又粗又硬又大 | 色呦呦在线| 欧美精品一区二区三区在线 | 制服师生在线 | 亚洲一级免费视频 | 欧美激情图片 | 一级片小视频 | 国产美女黄色 | 狠狠干夜夜 | 午夜精品导航 | 色婷婷亚洲一区二区三区 | 韩国三级bd高清中字2021 | mm1313亚洲精品 | 国产精品tv| 欧美激情黑人 | 日韩精品在线网站 | 69av一区二区三区 | 国产探花精品一区二区 | jizz内谢中国亚洲jizz | 天堂中文字幕 | 国产a网站 | 精品午夜一区二区三区在线观看 | 亚洲欧美日韩一区 | 欧美无遮挡高潮床戏 | 91女人18毛片水多国产 | 国产精品美女久久久久图片 | av黄色国产|