Play with Chain

Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 4679    Accepted Submission(s): 1892

Problem Description
YaoYao is fond of playing his chains. He has a chain containing n diamonds on it. Diamonds are numbered from 1 to n.

At first, the diamonds on the chain is a sequence: 1, 2, 3, …, n.

He will perform two types of operations:

CUT a b c: He will first cut down the chain from the ath diamond to the bth diamond. And then insert it after the cth diamond on the remaining chain.

For example, if n=8, the chain is: 1 2 3 4 5 6 7 8; We perform “CUT 3 5 4”, Then we first cut down 3 4 5, and the remaining chain would be: 1 2 6 7 8. Then we insert “3 4 5” into the chain before 5th diamond, the chain turns out to be: 1 2 6 7 3 4 5 8.



FLIP a b: We first cut down the chain from the ath diamond to the bth diamond. Then reverse the chain and put them back to the original position.

For example, if we perform “FLIP 2 6” on the chain: 1 2 6 7 3 4 5 8. The chain will turn out to be: 1 4 3 7 6 2 5 8



He wants to know what the chain looks like after perform m operations. Could you help him?
 
Input
There will be multiple test cases in a test data.

For each test case, the first line contains two numbers: n and m (1≤n, m≤3*100000), indicating the total number of diamonds on the chain and the number of operations respectively.

Then m lines follow, each line contains one operation. The command is like this:

CUT a b c // Means a CUT operation, 1 ≤ a ≤ b ≤ n, 0≤ c ≤ n-(b-a+1).

FLIP a b    // Means a FLIP operation, 1 ≤ a < b ≤ n.

The input ends up with two negative numbers, which should not be processed as a case.
 
Output
For each test case, you should print a line with n numbers. The ith number is the number of the ith diamond on the chain.
 
Sample Input
8 2
CUT 3 5 4
FLIP 2 6
-1 -1
 
Sample Output
1 4 3 7 6 2 5 8
 
Source
 
Recommend
zhengfeng   |   We have carefully selected several similar problems for you:  

pid=3486">3486 3479 3480 3481 

pid=3482">3482 

 

Splay    裸题

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (300000+10)
#define MAXM (300000+10)
typedef long long ll;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return (a-b+(a-b)/F*F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;} int n,m; class Splay
{
public:
int father[MAXN],siz[MAXN],n;
int ch[MAXN][2],val[MAXN];
bool root[MAXN],rev[MAXN];
int roo; //root
void mem(int _n)
{
MEM(father) MEM(siz) MEM(root) MEM(rev) MEM(ch) MEM(val) flag=0;
n=0;
roo=1;
build(roo,1,_n,0);root[1]=1;
}
void newnode(int &x,int f,int v)
{
x=++n;
father[x]=f;
val[x]=v-1;
} void build(int &x,int L,int R,int f)
{
if (L>R) return ;
int m=(L+R)>>1;
newnode(x,f,m);
build(ch[x][0],L,m-1,x);
build(ch[x][1],m+1,R,x);
maintain(x);
}
int getkth(int x,int k)
{
pushdown(x);
int t;
if (ch[x][0]) t=siz[ch[x][0]]; else t=0; if (t==k-1) return x;
else if (t>=k) return getkth(ch[x][0],k);
else return getkth(ch[x][1],k-t-1); } void pushdown(int x)
{
if (x) if (rev[x])
{
swap(ch[x][0],ch[x][1]);
if (ch[x][0]) rev[ ch[x][0] ]^=1;
if (ch[x][1]) rev[ ch[x][1] ]^=1;
rev[x]^=1;
}
}
void maintain(int x)
{
siz[x]=siz[ch[x][0]]+siz[ch[x][1]]+1;
}
void rotate(int x)
{
int y=father[x],kind=ch[y][1]==x; pushdown(y); pushdown(x); ch[y][kind]=ch[x][!kind];
if (ch[y][kind]) {
father[ch[y][kind]]=y;
}
father[x]=father[y];
father[y]=x;
ch[x][!kind]=y;
if (root[y])
{
root[x]=1;root[y]=0;roo=x;
}
else
{
ch[father[x]][ ch[father[x]][1]==y ] = x;
}
maintain(y);maintain(x);
}
void splay(int x)
{
while(!root[x])
{
int y=father[x];
int z=father[y];
if (root[y]) rotate(x);
else if ( (ch[y][1]==x)^(ch[z][1]==y) )
{
rotate(x); rotate(x);
}
else
{
rotate(y); rotate(x);
}
}
roo=x;
}
void splay(int x,int r)
{
while(!(father[x]==r))
{
int y=father[x];
int z=father[y];
if (father[y]==r) rotate(x);
else if ( (ch[y][1]==x)^(ch[z][1]==y) )
{
rotate(x); rotate(x);
}
else
{
rotate(y); rotate(x);
}
}
} void Cut(int a,int b,int c)
{
int x=getkth(roo,a),y=getkth(roo,b);
splay(x);
splay(y,roo);
pushdown(x);pushdown(y);
int z=ch[y][0];
ch[y][0]=0; maintain(y); maintain(x); int u=getkth(roo,c),v=getkth(roo,c+1);
splay(u);
splay(v,roo);
pushdown(u);pushdown(v);
ch[v][0]=z;father[z]=v;
maintain(v);maintain(u); } void Flip(int a,int b)
{
int x=getkth(roo,a),y=getkth(roo,b);
splay(x);
splay(y,roo);
pushdown(x);pushdown(y);
int z=ch[y][0];
rev[z]^=1;
maintain(y); maintain(x);
} bool flag;
void print(int x)
{
if (x==0) return ;
pushdown(x);
print(ch[x][0]); if (val[x]!=0&&val[x]!=n-1)
{
if (flag) putchar(' '); else flag=1;
printf("%d",val[x]); }
print(ch[x][1]);
} }S;
char s[MAXN]; int main()
{
// freopen("hdu3487.in","r",stdin);
// freopen(".out","w",stdout); while(cin>>n>>m)
{
if (n<0&&m<0) break;
n+=2;
S.mem(n);
For(i,m)
{
scanf("%s",s);
if (s[0]=='C')
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
S.Cut(a,b+2,c+1); } else {
int a,b;
scanf("%d%d",&a,&b);
S.Flip(a,b+2);
}
} S.print(S.roo);cout<<endl; } return 0;
}

HDU 3487(Play with Chain-Splay)[template:Splay]的更多相关文章

  1. HDU 3487 Play with Chain(Splay)

    题目大意 给一个数列,初始时为 1, 2, 3, ..., n,现在有两种共 m 个操作 操作1. CUT a b c 表示把数列中第 a 个到第 b 个从原数列中删除得到一个新数列,并将它添加到新数 ...

  2. HDU 3487 Play with Chain 【Splay】

    1-n的序列,有两种操作: 1,将一段区间翻转 2,将一段区间切下来放到剩余序列的第C个数后 采用延迟更新的方法维护区间的翻转,并维护一个size域. 添加一个最大点和一个最小点,防止出界 翻转时,将 ...

  3. hdu 3487 Play with Chain

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3487 YaoYao is fond of playing his chains. He has a c ...

  4. HDU 3487 Play with Chain | Splay

    Play with Chain Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. HDU 3487 Play with Chain (splay tree)

    Play with Chain Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. Hdu 3487 play the chain

    Description 瑶瑶很喜欢玩项链,她有一根项链上面有很多宝石,宝石从1到n编号. 首先,项链上的宝石的编号组成一个序列:1,2,3,...,n. 她喜欢两种操作: 1.CUT a b c:他会 ...

  7. Play with Chain 【HDU - 3487】【Splay+TLE讲解】

    题目链接 很好的一道题,用了三天多的时间,终于知道了我为什么T的原因,也知道了在Splay的同时该怎样子的节约时间,因为Splay本身就是大常数的O(N*logN),我们如果不在各种细节上节约时间,很 ...

  8. POJ 3580(SuperMemo-Splay区间加)[template:Splay V2]

    SuperMemo Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 11384   Accepted: 3572 Case T ...

  9. hdu 3487

    splay #include<cstdio> #include<cstring> #include<iostream> #include<algorithm& ...

随机推荐

  1. 用Python爬取影视网站,直接解析播放地址。

    记录时刻! 写这个爬虫主要是想让自己的爬虫实用,把脚本放到了服务器,成为可随时调用的接口. 思路算是没思路吧!把影视名带上去请求影视网站,然后解析出我们需要的播放地址. 我也把自己的接口分享出来.接口 ...

  2. css与jquery、图标字体

    *)还能这样选择 header #search input[type="text"] *)按钮常用颜色:#008cBA(字母大小写没有区别) *)清除浮动后,text-align没 ...

  3. ECNUOJ 2619 询问

    询问 Time Limit:2000MS Memory Limit:65536KBTotal Submit:286 Accepted:70 Description  Pollux最近对字符串匹配很感兴 ...

  4. 绿色版SecureCRT启动崩溃,遇到一个致命的错误且必须关闭

    百度搜了半天,大家都是说删除注册表的VanDyke就能解决问题,但是我用的是绿色版的,删除VanDyke后还不行. 然后试了一下重新解压出一个绿色版的SecureCRT,发现能用. 但之前我配置了很多 ...

  5. ImageLoader的简单分析(二)

    在<ImageLoader的简单分析>这篇博客中对IImageLoader三大组件的创建过程以及三者之间的关系做了说明.同一时候文章的最后也简单的说明了一下ImageLoader是怎么通过 ...

  6. OC便利方法

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { #if //    从面向对象的角度 ...

  7. UVA 12716 GCD XOR(数论+枚举+打表)

     题意:给你一个N,让你求有多少组A,B,  满足1<= B <= A <= N, 且 gcd(A,B) = A XOR B. 思路:首先我们能够得出两个结论: A-B > ...

  8. css如何实现垂直居中(5种方法)

    css如何实现垂直居中(5种方法) 一.总结 一句话总结:行内只需要简单地把 line-height 设置为那个对象的 height 值就可以使文本居中了. 块的话可以尝试 margin:auto: ...

  9. 4.graph.h

    #pragma once #include <stdio.h> #include <graphics.h> #include <mmsystem.h> #pragm ...

  10. react 常用的ui库

    1. https://ant.design/docs/react/introduce-cn   ANT DESIGNui 2. http://www.material-ui.com/#/   Mate ...