Submission #532959

#TimeUsernameProblemLanguageResultExecution timeMemory
532959Koosha_mvMinerals (JOI19_minerals)C++14
85 / 100
62 ms4004 KiB
#include <bits/stdc++.h> #include <algorithm> #include <chrono> #include <iostream> #include <random> #include <vector> using namespace std; #define dbgv(v) cout<<#v<<" = "; f(i,0,v.size()) cout<<v[i]<<" "; cout<<endl #define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl #define erorp(x) cout<<#x<<"={"<<(x.F)<<" , "<<x.S<<"}"<<endl #define eror(x) cout<<#x<<'='<<(x)<<endl #define f_(i,a,b) for(int i=a;i>=b;i--) #define f(i,a,b) for(int i=a;i<b;i++) #define nb(x) __builtin_popcount(x) #define all(v) v.begin(),v.end() #define bit(n,k) (((n)>>(k))&1) #define Add(x,y) x=(x+y)%mod #define maxm(a,b) a=max(a,b) #define minm(a,b) a=min(a,b) #define lst(x) x[x.size()-1] #define sz(x) int(x.size()) #define mp make_pair #define ll long long #define pb push_back #define S second #define F first #include "minerals.h" mt19937 rndm(chrono::steady_clock::now().time_since_epoch().count()); const int N=2e5+99; int n,last,prt,Q,dft,a[N],s[N],t[N],L[N],R[N],ps[N],mark[N]; vector<pair<int,int>> Ans; vector<int> pos,A,B; /* void Answer(int a, int b){ //cout<<a<<" edge "<<b<<endl; } int Query(int x){ Q++; if(mark[x]==1) dft+=(mark[a[x]]==0); else dft-=(mark[a[x]]==0); //cout<<"? "<<x<<" "<<res<<endl; return dft; } */ bool ask(int x){ mark[x]^=1; int p=Query(x),res=(p!=last); last=p; return res; } void get(int l,int r){ for(auto x : pos){ if(x<l || r<=x){ prt++; ask(B[x]); } } pos.clear(); f(i,l,r){ pos.pb(i); if(!mark[B[i]]) ask(B[i]),prt++; } //cout<<l<<" "<<r<<" "<<prt<<endl; } void solve(int l,int r,vector<int> &vec){ //cout<<l<<" "<<r<<endl; shuffle(all(vec),rndm); if(l+1==r){ Ans.pb({vec[0],B[l]}); return ; } vector<int> a,b; int mid=(l+r+1)>>1; get(l,mid); for(auto x : vec){ if(a.size()!=mid-l && ps[x]<ps[B[mid-1]] && (b.size()==r-mid || ask(x)==0)) a.pb(x); else b.pb(x); } solve(l,mid,a); solve(mid,r,b); } void Solve(int N){ n=N; vector<int> p(2*n); iota(all(p),1); shuffle(all(p),rndm); f(i,0,2*n){ ps[p[i]]=i; if(ask(p[i])){ A.pb(p[i]); } else B.pb(p[i]); } f(i,0,n) pos.pb(i); solve(0,n,A); for(auto p : Ans){ Answer(p.F,p.S); } } /* 4 1 4 2 5 3 6 7 8 prt1=656454 prt2= */ /* main(){ int n; cin>>n; f(i,1,n+1){ s[i]=i,t[i]=i+n; //cin>>s[i]>>t[i]; a[s[i]]=t[i]; a[t[i]]=s[i]; } Solve(n); eror(prt); eror(Q); } */

Compilation message (stderr)

minerals.cpp: In function 'void solve(int, int, std::vector<int>&)':
minerals.cpp:79:14: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   79 |   if(a.size()!=mid-l && ps[x]<ps[B[mid-1]] && (b.size()==r-mid || ask(x)==0)) a.pb(x);
      |      ~~~~~~~~^~~~~~~
minerals.cpp:79:56: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   79 |   if(a.size()!=mid-l && ps[x]<ps[B[mid-1]] && (b.size()==r-mid || ask(x)==0)) a.pb(x);
      |                                                ~~~~~~~~^~~~~~~
#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...