| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 115505 | thebes | 입자 가속기 (IZhO11_collider) | C++14 | 238 ms | 49516 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
struct nd{
char ch; int sz, p; nd *l, *r;
nd(char c):ch(c),sz(1),p(rand()),l(0),r(0){}
}*rt;
inline int sz(nd *n){return n?n->sz:0;}
inline void upd(nd *&n){if(n)n->sz=sz(n->l)+sz(n->r)+1;}
void split(nd *n,nd *&l,nd *&r,int k){
if(!n) l=r=NULL;
else if(sz(n->l)+1>k) split(n->l,l,n->l,k),r=n;
else split(n->r,n->r,r,k-sz(n->l)-1),l=n;
upd(n);
}
void mrg(nd *&n,nd *l,nd *r){
if(!l||!r) n=l?l:r;
else if(l->p>r->p) mrg(l->r,l->r,r),n=l;
else mrg(r->l,l,r->l),n=r;
upd(n);
}
char qu(nd *n,int k){
if(sz(n->l)+1==k) return n->ch;
else if(sz(n->l)+1<k) return qu(n->r,k-sz(n->l)-1);
else return qu(n->l,k);
}
int n, m, i, x, y;
char ch; string s; nd *l, *r, *t, *a;
int main(){
cin >> n >> m >> s;
for(i=0;i<s.size();i++) mrg(rt,rt,new nd(s[i]));
for(;m;m--){
scanf(" %c%d",&ch,&x);
if(ch=='q') printf("%c\n",qu(rt,x));
else{
scanf("%d",&y);
split(rt, a, r, x);
split(a, l, t, x-1);
mrg(rt, l, r);
split(rt, l, r, y-1);
mrg(a, l, t);
mrg(rt, a, r);
}
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
