Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- using namespace std;
- struct Line{
- int index;
- Line *l,*r;
- }*ptr[350][2];//head&tail
- int cd(int nu,int de){//ceiling devide
- int frac = (nu%de==0) ? nu/de : nu/de+1;
- return frac;
- }
- int main() {
- int N, M, BK, BL, amount;
- cin >> N >> M;
- BL = 316, amount = N;
- //ªì©l¤Æ
- for(int i = 1;i <= cd(N+M, BL);i++){
- ptr[i][0] = new Line(); ptr[i][0]->index = -1;
- ptr[i][1] = new Line(); ptr[i][1]->index = -2;
- ptr[i][0]->r = ptr[i][1]; ptr[i][0]->l = ptr[i-1][1];
- ptr[i][1]->l = ptr[i][0];
- if(ptr[i-1][1]!=NULL) ptr[i-1][1]->r = ptr[i][0];
- }
- //¿é¤J
- for(int i = 1, x;i <= N;i++){
- cin >> x;
- Line *node = new Line();
- node->index = x;
- node->r = ptr[cd(i,BL)][1];
- node->l = ptr[cd(i,BL)][1]->l;
- ptr[cd(i,BL)][1]->l = node;
- node->l->r = node;
- }
- //«ü¥O
- while(M--){
- char command[6];int coor, x;
- cin >> command >> coor;
- Line *node = ptr[cd(coor,BL)][0];
- int tmp = coor - (cd(coor,BL) - 1) * BL;
- while(tmp--&&node!=NULL)node = node->r;
- if(command[0]=='A'){
- amount++;
- cin >> x;
- Line *insert = new Line();
- insert->index = x;
- insert->l = node->l; insert->r = node;
- insert->l->r = insert;
- node->l = insert;
- for(int i = cd(coor,BL);i < cd(amount,BL);i++){
- Line *pull = ptr[i][1]->l;
- pull->r->l = pull->l; pull->l->r = pull->r;
- pull->r = ptr[i+1][0]->r; pull->r->l = pull;
- pull->l = ptr[i+1][0]; ptr[i+1][0]->r = pull;
- }
- }
- else if(command[0]=='L'){
- node->l->r = node->r; node->r->l = node->l;
- for(int i = cd(coor,BL);i < cd(amount,BL);i++){
- Line *pull = ptr[i+1][0]->r;
- pull->l->r = pull->r; pull->r->l = pull->l;
- pull->l = ptr[i][1]->l; pull->l->r = pull;
- pull->r = ptr[i][1]; ptr[i][1]->l = pull;
- }
- amount--;
- }
- else printf("%d\n",node->index);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement