제출 #18518

#제출 시각아이디문제언어결과실행 시간메모리
18518suhgyuho_william입자 가속기 (IZhO11_collider)C++98
0 / 100
122 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 push(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]++; } 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++){ 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); else where(y); push(b,t,v); }else if(op[0] == 'q'){ scanf("%d",&x); where(x); printf("%c\n",'w'+bucket[b][t]); } if(i%MOD == 0) setting(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...