제출 #133756

#제출 시각아이디문제언어결과실행 시간메모리
133756hamzqq9Minerals (JOI19_minerals)C++14
80 / 100
71 ms3360 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; for(auto x:cd) { int cur=Query(p[x]); if(cnt!=cur) { rcd.pb(x); } else { lcd.pb(x); } cnt=cur; } 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...