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 ...
随机推荐
- javaScript校验图片大小、格式
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...
- android动画解析(初级)
效果图: ObjectAnimator继承自ValueAnimator的,底层的动画实现机制也是基于ValueAnimator来完成的,因此ValueAnimator仍然是整个属性动画当中最核心的一个 ...
- css 伪类选择器制作登录框表单
使用伪类选择器 制作鼠标悬停时文本框出现橙色虚线边框 制作鼠标激活时出现背景颜色淡橙色 使用css制作文本框圆角矩形效果,制作文本框背景图片,及背景不重复效果 <!DOCTYPE html> ...
- idea中使用逆向工程----三部曲
逆向工程小伙伴可能都知道,可以根据公司大佬的数据库简单创建实体类和dao接口以及mapper的映射文件,逆向工程可能在数据库字段比较少的时候体现不会方便,但是当参与到数据库字段比较多的时候,我们不可能 ...
- JDK1.8简单配置环境变量---两步曲
鄙人最近重新装完系统之后,在安装和配置jdk1.8的时候,发现网上许多教程配置jdk环境变量时都还在沿用传统的方式配置,但是随着技术的更新,完全没有必要那么麻烦了. 下载和安装jdk的教程,在这里就不 ...
- pip安装第三方包总失败
第一步:升级pip python -m pip install -U pip 第二布:安装想下载的第三方包 python -m pip install xx 一般来说pip安装不会失败的,失败的话就尝 ...
- rsync + git发布项目
前言: 更新项目的时候需要将更改的文件一一上传,这样比较麻烦,用版本控制器git +rsync 搭建一个发布服务器,以后发布文件非常方便 首先说下,我这边的更新流程,本地写完之后,git push 到 ...
- 【jQuery】手机验证码倒计时效果
<ul class="ulist"> <li class="group"> <label class="label&qu ...
- 【菜鸟笔记】记一次django无法正常在ie和edge浏览器渲染html页面
如图所示,django无法渲染html显示成下载文件了 一步一步的从render ==>HttpResponse ==>HttpResponseBase 找到 即django文件夹下的ht ...
- C++继承权限
牢记两句话: 1.三种继承方式不影响子类对父类的访问权限,子类对父类的访问权限取决于父类的访问控制权. 2.三种继承方式是为了控制子类的调用方对父类的访问权限.比如private继承,对于子类的调用方 ...