HDU 4699 Editor(双向链表)
双向链表直接模拟。
用一个辅助数组maxSum来维护一下前k项中[1,k]的最大和。
因为光标是一格一格的移动,所以每次光标右移的时候动态更新一下即可。
时间复杂度O(n)。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm> using namespace std; const int MAXN = ;
const int INF = << ; struct node
{
int val;
node *next;
node *pre;
}; int sum[MAXN];
int maxSum[MAXN]; int main()
{
//freopen( "1004.in", "r", stdin );
//freopen( "test.txt", "w", stdout );
int Q;
node *head = ( node *)malloc(sizeof(node)); while ( scanf( "%d", &Q ) == )
{
head->pre = NULL;
head->next = NULL; node *cur = head;
maxSum[] = -INF;
sum[] = ;
int pos = ; char op[];
int a;
for ( int i = ; i < Q; ++i )
{
scanf( "%s", op );
if ( op[] == 'I' )
{
scanf( "%d", &a ); ++pos;
sum[pos] = sum[pos-] + a;
maxSum[pos] = max( sum[pos], maxSum[pos-] ); node *p = (node *)malloc( sizeof(node) );
p->val = a;
p->next = NULL;
p->pre = cur; if ( cur->next )
{
p->next = cur->next;
cur->next->pre = p;
} cur->next = p;
cur = cur->next;
}
else if ( op[] == 'Q' )
{
scanf( "%d", &a );
if ( pos < a ) a = pos;
printf( "%d\n", maxSum[a] );
}
else if ( op[] == 'L' )
{
if ( cur->pre != NULL )
{
cur = cur->pre;
--pos;
}
}
else if ( op[] == 'R' )
{
//printf( "cur->next=%d %d\n", cur->next, NULL );
if ( cur->next != NULL )
{
cur = cur->next;
++pos;
sum[pos] = sum[pos - ] + cur->val;
maxSum[pos] = max( sum[pos], maxSum[pos-] );
}
}
else if ( op[] == 'D' )
{
--pos; node *p = cur;
cur = p->pre; cur->next = p->next; if ( p->next )
p->next->pre = cur; free(p);
}
/*
node *pp = head->next;
while ( pp )
{
printf( "%d ", pp->val );
pp = pp->next;
}
puts("");
*/
}
}
return ;
}
HDU 4699 Editor(双向链表)的更多相关文章
- HDU—4699 Editor 双向链表+子集和
惨.今天聪哥选了2013 多校10做训练,结果一题都没做出来.这个题目是数据结构,正好是我强项 如果只是插入 删除 光标左右移动,那都小菜,用链表全解决,关键是那个Q k 要求 a1到aq的连续子序列 ...
- HDU 4699 - Editor - [对顶栈]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4699 Problem Description Sample Input8I 2I -1I 1Q 3LD ...
- HDU 4699 Editor (2013多校10,1004题)
Editor Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Su ...
- hdu 4699 Editor 模拟栈
思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> ...
- HDU 4699 Editor 维护栈
维护两个栈,分别存光标前和光标后的数 再维护前缀和的栈 和 前缀和最大值的栈 注意一下左移,右移,删除到顶了就不操作了 5个操作 I x : 光标处插入x -----> s1.push(x) ...
- HDU 4699 Editor(模拟 对顶栈)
题目大意: 给定一个整数序列 维护5种操作 次数<1e6 I x: 光标位置插入x 然后光标位于x之后 D: 删除光标前一个数 L: 光标左移 R: 光标右移 Q k: 询问位置k之前的最大前缀 ...
- [置顶] hdu 4699 2个栈维护 or 伸展树
hdu 4699 Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 注意这里的k是在光标之前的, ...
- 【HDU 4699】 Editor
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...
- HDU/HDOJ 4699 Editor
对顶栈算法. 此题充分说明了cin的不中以及scanf的优越性. 我TM用cin超时了!!!换成scanf就A了!!! #include <cstdio> #include <cst ...
随机推荐
- css3阴影 box-shadow
语法 box-shadow:X轴偏移量 y轴偏移量 [阴影模糊半径] [阴影扩展半径] [阴影颜色] [投影方式] 参数介绍: 注:inset 可以写在参数的第一个或最后一个,其它位置是无效的. 阴影 ...
- @NotEmpty@NotNull和@NotBlank的区别
这几个可以为对象,不只是字符串 1.@NotNull 不能为null,但可以为empty (""," "," ") 2.@NotEmpty ...
- python—命名空间、作用域查找顺序、闭包
名称空间 name space,如下图: x = 1, 1存放在内存中,1 会有一个内存地址,x 则 存放在 name space 里,并同时记录了 1的内存地址, 即 名称空间是存放了变量x与1绑定 ...
- 短信状态监听 - iOS
当使用 App 时若短信介入需要对当前状态进行监听操作,根据不同的状态实行相关的需求操作,废话不多说步骤如下. 首先,常规操作先引用对应的头文件,来为后续功能铺路. #import <Messa ...
- iconv for linux(c)
// code_convert("gb2312","utf-8",inbuf,outbuf,outlen);static int code_convert(co ...
- UVa中国麻将(Chinese Mahjong,Uva 11210)
简单的回溯题 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...
- What is JPA
What is JPA JPA可以看做是EJB3.0的一部分,但它又不限于EJB 3.0,你可以在Web应用.甚至桌面应用中使用.JPA只是一种Java持久化标准,它意在规范ORM(对象关系映射模型) ...
- Java 算法随笔(一)
1. 最大子序列和问题 给定(可能有负数)整数a(1).a(2).……a(n),求 a(1)+a(2)+……+a(j)的最大值. 也就是:在一系列整数中,找出连续的若干个整数,这若干个整数之和最大.有 ...
- centos安装Linux
CentOS下安装Redis Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计 ...
- 笔记-python-module导入技巧
笔记-python-module导入技巧 1. module导入技巧 1.1. 控制模块导入内容 在模块中定义 __all__ = [] 不多言,主要是影响from <> ...