제출 #1307197

#제출 시각아이디문제언어결과실행 시간메모리
1307197simona1230Abracadabra (CEOI22_abracadabra)C++20
0 / 100
941 ms18464 KiB
#include <bits/stdc++.h> using namespace std; int n,q; int a[200001]; int p[1001][1001]; int t,x; void read() { cin>>n>>q; for(int i=1; i<=n; i++) { cin>>a[i]; p[0][i]=a[i]; } } void prec1() { for(int i=1; i<=n; i++) { int j=1; int i1=1,i2=n/2+1; while(i1<=n/2||i2<=n) { if(i1>n/2)p[i][j++]=p[i-1][i2++]; else if(i2>n)p[i][j++]=p[i-1][i1++]; else if(p[i-1][i1]<p[i-1][i2])p[i][j++]=p[i-1][i1++]; else p[i][j++]=p[i-1][i2++]; } } } void solve1() { for(int i=1; i<=q; i++) { int t,id; cin>>t>>id; cout<<p[min(n,t)][id]<<endl; } } struct group { int id; group(){} group(int _id) { id=_id; } bool operator<(const group&g)const { return a[id]<a[g.id]; } }; set<group> s; int b[200001]; int sz[200001]; void solve() { cin>>t>>x; int i=1; while(i<=n) { int j=i; while(j<=n&&a[j]<=a[i])j++; s.insert({i}); //cout<<i<<" - "<<j-i<<endl; sz[i]=j-i; i=j; } //cout<<"here"<<endl; auto it=s.begin(); int cnt=0; int br=-1; while(cnt<n/2) { cnt+=sz[it->id]; //cout<<"! "<<cnt<<endl; if(cnt>n/2) br=it->id; else it++; } cnt-=sz[it->id]; //cout<<br<<" > "<<cnt<<endl; if(br==-1)return; int lp=0; while(lp<t) { lp++; it=s.find(br); int nid=it->id+n/2-cnt; sz[nid]=sz[it->id]-(n/2-cnt); s.erase(it); sz[br]=n/2-cnt; s.insert({br}); s.insert({nid}); //cout<<"!!!! "<<nid<<" "<<sz[nid]<<" "<<br<<" "<<sz[br]<<endl; cnt+=sz[br]+sz[nid]; bool f=0; it=s.find(br); while(cnt>n/2) { cnt-=sz[it->id]; if(cnt==n/2)f=1; else if(cnt<n/2)br=it->id; else it--; } if(f)break; } /*for(int i=1;i<=n;i++) cout<<i<<" 0 "<<sz[i]<<endl;*/ i=1; for(it=s.begin();it!=s.end();it++) { group g=*it; int j=sz[g.id]; //cout<<g.id<<" 0> "<<sz[g.id]<<endl; while(j--) { b[i++]=a[g.id]; g.id++; } } cout<<b[x]<<endl; for(int i=1;i<q;i++) { cin>>t>>x; cout<<b[x]<<endl; } /*for(int i=1;i<=n;i++) cout<<b[i]<<" "; cout<<endl;*/ } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); read(); if(n<=1) { prec1(); solve1(); } else { solve(); } return 0; } /* 10 0 3 2 7 5 4 6 1 8 9 10 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...