HDU 4286(Data Handler-支持翻转的list)
来源:互联网 发布:alpha软件官方网站 编辑:程序博客网 时间:2024/04/29 07:32
要求维护一个seq,有两个光标(左光标和右光标)。
要求维护:移动光标,在光标前后加字母/删除,翻转两个光标间的序列
n<=500000,保证操作合法,左光标总在右光标左边至少一个字母前。
如果没有翻转就是普通链表,
我们考虑将序列拆成左,光标之间,右三段
发现只需要考虑中间那段是否翻转过即可,如果翻转,则变头为尾,向链表一样维护
ps:当然splay块链什么的我也是兹磁de
#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<functional>#include<iostream>#include<cmath>#include<cctype>#include<ctime>#include<iomanip> #include<vector>#include<string>#include<queue>#include<stack>#include<map>#include<deque>#include<sstream>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 ForkD(i,k,n) for(int i=n;i>=k;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 (o<<1)#define Rson ((o<<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 (1000000007)#define pb push_back#define mp make_pair #define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %I64d\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")typedef long long ll;typedef long double ld;typedef unsigned long long ull;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)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} #define MAXN (1000000+10)deque<int> A,B,C;deque<int>::iterator it;int a[MAXN],n;int L,R;int Pop_front(deque<int> &t) { int tmp=t.front(); t.pop_front(); return tmp;}int Pop_back(deque<int> &t) { int tmp=t.back(); t.pop_back(); return tmp;}bool fl=0,dir=0;void Print() { fl=0; for(it=A.begin();it!=A.end();++it) { if (fl) putchar(' '); fl=1; printf("%d",*it); } if (!dir) for(it=B.begin();it!=B.end();++it) { if (fl) putchar(' '); fl=1; printf("%d",*it); } else for(deque<int>::reverse_iterator it=B.rbegin();it!=B.rend();++it) { if (fl) putchar(' '); fl=1; printf("%d",*it); } for(it=C.begin();it!=C.end();++it) { if (fl) putchar(' '); fl=1; printf("%d",*it); } puts("");}int main(){// freopen("A.in","r",stdin);// freopen(".out","w",stdout); int T=read(); while(T--) { A.clear();B.clear(),C.clear(); n=read(); For(i,n) a[i]=read(); cin>>L>>R; For(i,n) if (i<L) A.push_back(a[i]); else if (i<=R) B.push_back(a[i]); else C.push_back(a[i]); int q=read(); dir=0; while(q--) { char s[100]; scanf("%s",s); if (strcmp(s,"MoveLeft")==0) { char c[2]; scanf("%s",c); if (c[0]=='L') {if (!dir) B.push_front(Pop_back(A)); else B.push_back(Pop_back(A));} else {if (!dir) C.push_front(Pop_back(B)); else C.push_front(Pop_front(B)); } } else if (strcmp(s,"MoveRight")==0) { char c[2]; scanf("%s",c); if (c[0]=='L') {if (!dir) A.push_back(Pop_front(B)); else A.push_back(Pop_back(B));} else {if (!dir) B.push_back(Pop_front(C)); else B.push_front(Pop_front(C)); } } else if (strcmp(s,"Insert")==0) { char c[2];int p; scanf("%s%d",c,&p); if (c[0]=='L' xor dir) B.push_front(p); else B.push_back(p); } else if (strcmp(s,"Delete")==0) { char c[2]; scanf("%s",c); if (c[0]=='L' xor dir) B.pop_front(); else B.pop_back(); } else { dir^=1; } } Print(); } return 0;}
0 0
- HDU 4286(Data Handler-支持翻转的list)
- HDU 4286 - Data Handler
- hdu 4286 Data Handler
- hdu 4286 Data Handler
- HDU 4286 Data Handler
- hdu 4286 Data Handler (Splay)
- HDU 4286 Data Handler(splay)
- hdu 4286 Data Handler(Splay)
- HDU 4286 Data Handler (双端队列)
- HDU 4286 Data Handler(伸展树)
- HDU 4286 Data Handler --双端队列
- HDU 4286 Data Handler // 模拟链表
- HDU 4286 Data Handler(12年天津 Splay tree)
- HDU 4286 Data Handler (splay tree || 双向链表模拟)
- HDU 4286 Data Handler [栈,双端队列]
- HDU 4286 Data Handler( 数据结构,双向队列,模拟)
- HDU 4286 Data Handler (双向链表)
- HDU 286 Data Handler <deque 双向队列>
- iOSwebview中读取html,css,js语句
- java操作Excel
- linux查看当前文件系统格式
- 中国剩余定理 孙子定理 一元线性同余方程组
- 【剑指offer】栈的压入、弹出序列(java版)
- HDU 4286(Data Handler-支持翻转的list)
- sql 插入数据取sid最大值加一保存
- 第二十章 Skeletal Animation
- 二维数组中的查找
- ConcurrentHashMap和HashTable的区别
- C#的第11节课
- 重叠IO overlapped I/O 运用详解
- jQuery.qrcode.js客户端生成二维码,支持中文并且可以生成LOGO
- 拜访(动态规划)----美团2016研发工程师在线编程题