Submission #133761

#TimeUsernameProblemLanguageResultExecution timeMemory
133761hamzqq9Minerals (JOI19_minerals)C++14
90 / 100
75 ms3440 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; vector<int> A,B; vector<int> p; vector<int> on; int cnt; void solve(int l,int r,vector<int> cd) { if(l==r) { for(auto x:cd) Answer(p[x],p[A[l]]); return ; } int mid=(l+r)>>1; if(on[l]) { for(int i=mid+1;i<=r;i++) cnt=Query(p[A[i]]),on[i]=!on[i]; } else { for(int i=l;i<=mid;i++) cnt=Query(p[A[i]]),on[i]=!on[i]; } vector<int> lcd,rcd; bool tol=0,tor=0; for(auto x:cd) { if(tol) {lcd.pb(x);continue ;} if(tor) {rcd.pb(x);continue ;} int cur=Query(p[x]); if(cnt!=cur) { rcd.pb(x); } else { lcd.pb(x); } cnt=cur; if(sz(lcd)==mid-l+1) tor=1; if(sz(rcd)==r-mid) tol=1; } solve(l,mid,lcd); solve(mid+1,r,rcd); } void Solve(int n) { n<<=1; mt19937 rnd(4); on=vector<int>(n,0); for(int i=1;i<=n;i++) p.pb(i); shuffle(p.begin(),p.end(),rnd); for(int i=0;i<n;i++) { int cur=Query(p[i]); on[i]=!on[i]; if(cur>cnt) { A.pb(i); } else { B.pb(i); } cnt=cur; } solve(0,sz(A)-1,B); }
#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...