HDU4699Editor
2016-06-07 23:36
260 查看
题目描述:
Sample Input
8
I 2
I -1
I 1
Q 3
L
D
R
Q 2
Sample Output
2
3
Hint
The following diagram shows the status of sequence after each instruction:
题意:
对一个数列进行操作,I:光标位置后面插入一个权值为x的数,D:删除光标前的那个数,L:光标左移一位,R:光标右移一位,Q:求1到光标前位置的最大的前缀和。
题解:
此题因为是求光标前的k个数的前缀和最大值,比较容易处理。
此题可以用两个栈来模拟,一个栈记录光标前的数,一个栈记录光标后的数,用数组sum[size]=sum[size-1]+m;记录前缀和,用mmax[size]=max(mmax[size-1],sum[size]);记录光标前最大值。以下是ac代码:
Sample Input
8
I 2
I -1
I 1
Q 3
L
D
R
Q 2
Sample Output
2
3
Hint
The following diagram shows the status of sequence after each instruction:
题意:
对一个数列进行操作,I:光标位置后面插入一个权值为x的数,D:删除光标前的那个数,L:光标左移一位,R:光标右移一位,Q:求1到光标前位置的最大的前缀和。
题解:
此题因为是求光标前的k个数的前缀和最大值,比较容易处理。
此题可以用两个栈来模拟,一个栈记录光标前的数,一个栈记录光标后的数,用数组sum[size]=sum[size-1]+m;记录前缀和,用mmax[size]=max(mmax[size-1],sum[size]);记录光标前最大值。以下是ac代码:
#include<iostream> #include<cstdio> #include<stack> #include<cstring> #include<algorithm> using namespace std; const int maxn=1e6+10; const int inf=0x3f3f3f3f; int mmax[maxn],sum[maxn]; stack<int> s1; stack<int> s2; int main() { int n; while(~scanf("%d",&n)) { char s[5]; memset(mmax,0,sizeof(mmax)); memset(sum,0,sizeof(sum)); mmax[0]=-inf; //没写这个wa了好多次!!! int m; int all=0,tmp,size=0; while(!s1.empty()) s1.pop(); while(!s2.empty()) s2.pop(); while(n--) { scanf("%s",s); switch(s[0]) { case 'I': scanf("%d",&m); s1.push(m); all++; size=s1.size(); sum[size]=sum[size-1]+m; mmax[size]=max(mmax[size-1],sum[size]); break; case 'D': s1.pop(); all--; break; case 'L': if(!s1.empty()) { tmp=s1.top(); s1.pop(); s2.push(tmp); } break; case 'R': if(!s2.empty()) { tmp=s2.top(); s2.pop(); s1.push(tmp); size=s1.size(); sum[size]=sum[size-1]+tmp; mmax[size]=max(mmax[size-1],sum[size]); } break; case 'Q': scanf("%d",&m); printf("%d\n",mmax[m]); break; } } } }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)