제출 #133272

#제출 시각아이디문제언어결과실행 시간메모리
133272hamzqq9Minerals (JOI19_minerals)C++14
40 / 100
106 ms6712 KiB
#include "minerals.h" #include<bits/stdc++.h> #define st first #define nd second #define pb push_back #define ppb pop_back #define ii pair<int,int> #define ll long long #define orta ((bas+son)>>1) #define sz(x) ((int)x.size()) #define all(x) x.begin(),x.end() #define umin(x,y) x=min(x,y) #define umax(x,y) x=max(x,y) #define inf 2000000000000000 #define N 500005 #define MOD 998244353 #define KOK 700 using namespace std; void Solve(int n) { n<<=1; mt19937 rnd(time(NULL)); vector<int> p; vector<int> gr(n); vector<ii> qu(n); vector<vector<int>> ask(n); vector<int> A,B; vector<int> on(n,0); for(int i=1;i<=n;i++) p.pb(i); shuffle(p.begin(),p.end(),rnd); int cnt=0; for(int i=0;i<n;i++) { int cur=Query(p[i]); if(cur>cnt) { gr[i]=0; A.pb(i); } else { gr[i]=1; qu[i]={0,sz(A)-1}; if(qu[i].st!=qu[i].nd) ask[(qu[i].st+qu[i].nd)>>1].pb(i); B.pb(i); } cnt=cur; } // values in vectors are just indices not permuation values while(1) { bool flag2=1; for(int t=1;t<=2;t++) { if(t==1) { for(int i=sz(A)-1;i>=0;i--) { for(auto x:ask[i]) { int cur=Query(p[x]); if(cur!=cnt) { qu[x].st=i+1; } else { qu[x].nd=i; } cnt=cur; if(qu[x].st!=qu[x].nd) ask[(qu[x].st+qu[x].nd)>>1].pb(x); } ask[i].clear(); cnt=Query(p[A[i]]); } } else { for(int i=0;i<sz(A);i++) { cnt=Query(p[A[i]]); for(auto x:ask[i]) { int cur=Query(p[x]); if(cur!=cnt) { qu[x].st=i+1; } else { qu[x].nd=i; } cnt=cur; if(qu[x].st!=qu[x].nd) ask[(qu[x].st+qu[x].nd)>>1].pb(x); } ask[i].clear(); } } bool flag=0; for(int i=0;i<sz(A);i++) flag|=(sz(ask[i])>0); if(!flag) {flag2=0;break ;} } if(!flag2) break ; } for(int i:B) { int pos=qu[i].st; Answer(p[A[pos]],p[i]); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...