Submission #18521

#TimeUsernameProblemLanguageResultExecution timeMemory
18521suhgyuho_williamCollider (IZhO11_collider)C++98
100 / 100
124 ms13900 KiB
#include <stdio.h> int N,M,last; int bucket[1010][2010],cnt[1010]; char s[1000010]; #define MOD 1000 int b,t; void where(int x){ int i,sum = 0; for(i=0; i<=last; i++){ if(sum < x && x <= sum+cnt[i]){ b = i; break; } sum += cnt[i]; } t = x-sum-1; } void pop(int x,int y){ int i; for(i=y; i<cnt[x]-1; i++){ bucket[x][i] = bucket[x][i+1]; } cnt[x]--; } void push1(int x,int y,int v){ int i; for(i=cnt[x]-1; i>=y; i--){ bucket[x][i+1] = bucket[x][i]; } bucket[x][y] = v; cnt[x]++; } void push2(int x,int y,int v){ int i; for(i=cnt[x]-1; i>y; i--){ bucket[x][i+1] = bucket[x][i]; } bucket[x][y+1] = v; cnt[x]++; } int tmp[1000010]; void setting(){ int i,j,rear; rear = -1; for(i=0; i<=last; i++){ for(j=0; j<cnt[i]; j++){ rear++; tmp[rear] = bucket[i][j]; } cnt[i] = 0; } for(i=0; i<N; i++){ bucket[i/MOD][i%MOD] = tmp[i]; cnt[i/MOD]++; } } int main(){ int i,j; int x,y; int v; char op[5]; //freopen("input.txt","r",stdin); scanf("%d %d",&N,&M); scanf("%s",s); for(i=0; i<N; i++){ bucket[i/MOD][i%MOD] = s[i]-'x'+1; cnt[i/MOD]++; } last = ((N-1)/MOD); for(i=1; i<=M; i++){ /*for(x=1; x<=N; x++){ where(x); printf("%c",'w'+bucket[b][t]); } printf("\n");*/ scanf("%s",op); if(op[0] == 'a'){ scanf("%d %d",&x,&y); if(x == y) continue; where(x); v = bucket[b][t]; pop(b,t); if(x < y){ where(y-1); push2(b,t,v); }else{ where(y); push1(b,t,v); } }else if(op[0] == 'q'){ scanf("%d",&x); where(x); printf("%c\n",'w'+bucket[b][t]); }else{ while(true){} } if(i%MOD == 0) setting(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...