# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
18519 | suhgyuho_william | 입자 가속기 (IZhO11_collider) | C++98 | 124 ms | 13900 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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++){
/*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);
else where(y);
push(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 time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |