hdu 4699 Editor(双向链表+随便维护前缀和)
来源:互联网 发布:易订货源码下载 编辑:程序博客网 时间:2024/05/29 02:47
Editor
Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1532 Accepted Submission(s): 480
Problem Description
Sample Input
8I 2I -1I 1Q 3LDRQ 2
Sample Output
23HintThe following diagram shows the status of sequence after each instruction:
Source
2013 Multi-University Training Contest 10
Recommend
zhuyuanchen520 | We have carefully selected several similar problems for you: 4996 4995 4994 4993 4992
题意:
就是模仿编辑器。只是只能编辑数字。然后询问是询问光标前的数列的前k项和的最大值。
思路:
非常像Splay但是完全没那么复杂。用链表模拟。然后随便用什么维护前i项和就行了。比赛时没多想就用的线段树。其实用个数组就够了,不过懒得写了,
详细见代码:
#include<algorithm>#include<iostream>#include<string.h>#include<stdio.h>using namespace std;const int INF=0x3f3f3f3f;const int maxn=1000010;typedef long long ll;#define lson L,mid,ls#define rson mid+1,R,rsint mav[maxn<<2],st[maxn];struct node{ int pre,next,rk,val,sum;} pos[maxn];void build(int L,int R,int rt){ mav[rt]=-INF; if(L==R) return; int ls=rt<<1,rs=ls|1,mid=(L+R)>>1; build(lson); build(rson);}void update(int L,int R,int rt,int p,int d){ if(L==R) { mav[rt]=d; return; } int ls=rt<<1,rs=ls|1,mid=(L+R)>>1; if(p<=mid) update(lson,p,d); else update(rson,p,d); mav[rt]=max(mav[ls],mav[rs]);}int qu(int L,int R,int rt,int l,int r){ if(l<=L&&R<=r) return mav[rt]; int ls=rt<<1,rs=ls|1,mid=(L+R)>>1,tp=-INF; if(l<=mid) tp=max(tp,qu(lson,l,r)); if(r>mid) tp=max(tp,qu(rson,l,r)); return tp;}int main(){ int q,i,x,ps,ns,tot; char cmd[10]; while(~scanf("%d",&q)) { tot=0; build(1,q,1); for(i=q+5;i>=0;i--) st[tot++]=i; ps=st[--tot]; pos[ps].pre=pos[ps].next=-1; pos[ps].rk=pos[ps].sum=0; for(i=1;i<=q;i++) { scanf("%s",cmd); if(cmd[0]=='I') { scanf("%d",&x); ns=st[--tot]; pos[ns].val=x; pos[ns].rk=pos[ps].rk+1; pos[ns].sum=pos[ps].sum+x; pos[ns].pre=ps; pos[ns].next=pos[ps].next; if(pos[ps].next!=-1) pos[pos[ps].next].pre=ns; pos[ps].next=ns; update(1,q,1,pos[ns].rk,pos[ns].sum); ps=ns; } else if(cmd[0]=='D') { if(pos[ps].pre==-1) continue; pos[pos[ps].pre].next=pos[ps].next; if(pos[ps].next!=-1) pos[pos[ps].next].pre=pos[ps].pre; st[tot++]=ps; ps=pos[ps].pre; } else if(cmd[0]=='L') { if(pos[ps].pre!=-1) ps=pos[ps].pre; } else if(cmd[0]=='R') { if(pos[ps].next==-1) continue; pos[pos[ps].next].rk=pos[ps].rk+1; pos[pos[ps].next].sum=pos[ps].sum+pos[pos[ps].next].val; ps=pos[ps].next; update(1,q,1,pos[ps].rk,pos[ps].sum); } else { scanf("%d",&x); printf("%d\n",qu(1,q,1,1,x)); } //printf("ps %d\n",pos[ps].rk); } } return 0;}
1 0
- hdu 4699 Editor(双向链表+随便维护前缀和)
- hdu 4699 Editor 双栈维护最长前缀
- hdu 6012 维护区间前缀和
- 前缀和维护
- HDU6215【队列+双向链表维护】
- HDU 5576 Expection of String (DP, 前缀和维护) 2015年上海现场赛E题
- hdu 5480(前缀和)
- HDU 6205 前缀和
- SHU1952 Odd Pairs(维护前缀和)
- hdu 4699 Editor
- HDU 4699 Editor
- hdu 4699 Editor 模拟
- hdu 4699 Editor(Splay)
- Hdu 4699 Editor(Splay)
- hdu 5084 前缀和预处理
- hdu 5163 前缀和+枚举
- hdu 5183 hash+前缀和
- hdu 5044 树链剖分+前缀和
- 第九章、文件与文件系统的压缩与打包
- Valid Palindrome
- Set笔记
- fgetc和getc的区别
- google学术访问问题解决方案
- hdu 4699 Editor(双向链表+随便维护前缀和)
- 从0搭建RAC实验环境(一)
- mysql主从备份及原理分析
- Java开发中的23种设计模式详解
- 2014-9-12
- bwt - search 算法
- 从0搭建RAC实验环境(二)
- svn 在centos中部署 以及hook
- jordan spizike Peninsula Network - � Read tipsDespite the care of three men tired unbearable