双向链表直接模拟。

用一个辅助数组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(双向链表)的更多相关文章

  1. HDU—4699 Editor 双向链表+子集和

    惨.今天聪哥选了2013 多校10做训练,结果一题都没做出来.这个题目是数据结构,正好是我强项 如果只是插入 删除 光标左右移动,那都小菜,用链表全解决,关键是那个Q k 要求 a1到aq的连续子序列 ...

  2. HDU 4699 - Editor - [对顶栈]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4699 Problem Description Sample Input8I 2I -1I 1Q 3LD ...

  3. HDU 4699 Editor (2013多校10,1004题)

    Editor Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  4. hdu 4699 Editor 模拟栈

    思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> ...

  5. HDU 4699 Editor 维护栈

    维护两个栈,分别存光标前和光标后的数 再维护前缀和的栈 和 前缀和最大值的栈 注意一下左移,右移,删除到顶了就不操作了 5个操作 I x : 光标处插入x  -----> s1.push(x) ...

  6. HDU 4699 Editor(模拟 对顶栈)

    题目大意: 给定一个整数序列 维护5种操作 次数<1e6 I x: 光标位置插入x 然后光标位于x之后 D: 删除光标前一个数 L: 光标左移 R: 光标右移 Q k: 询问位置k之前的最大前缀 ...

  7. [置顶] hdu 4699 2个栈维护 or 伸展树

    hdu 4699  Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 注意这里的k是在光标之前的, ...

  8. 【HDU 4699】 Editor

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...

  9. HDU/HDOJ 4699 Editor

    对顶栈算法. 此题充分说明了cin的不中以及scanf的优越性. 我TM用cin超时了!!!换成scanf就A了!!! #include <cstdio> #include <cst ...

随机推荐

  1. 中期ppt制作

    陀螺仪的使用解释:https://zhuanlan.zhihu.com/p/29244429 手机坐标轴的图片:http://jcjs.siat.ac.cn/ch/reader/create_pdf. ...

  2. centos install rtl8188ce driver

    1.导入公钥,注意大小写. rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org 2.安装ELRepo库. rpm -Uvh http://elr ...

  3. xml中${}的使用含义(美元符号大括号,以Spring、ibatis、mybatis为例)

    项目中,经常会在xml中看到这样的写法: <properties resource="properties/database.properties"/> <dat ...

  4. MySQL存储引擎MyISAM与InnoDB

    一. MySQL存储引擎MyISAM与InnoDB如何选择 MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...

  5. 使用winsw将spring-boot jar包注册成windows服务

    背景:最近的项目中使用spring-boot, https://github.com/kohsuke/winsw/releases <service> <id>YJPSS< ...

  6. python数据类型的转换

  7. Target runtime Apache Tomcat v8.5 is not defined.

    Target runtime Apache Tomcat v8.5(或者其它版本) is not defined. 这个错误通常是在从文件夹中导入别人的项目的时候发生,因为 在 .setting 中有 ...

  8. 【Python3】操作文件,目录和路径

    1.遍历文件夹和文件  Python代码   import os import os.path rootdir = "d:/test" for parent,dirnames,fi ...

  9. vim编辑器使用习惯问题

    Ubuntu中vi在编辑状态下方向键不能用,一按方向键盘就出ABCD,想插入个字母还非常麻烦,还有回格键不能删除等我们平时习惯的一些键都不能使用. 解决办法: 可以安装vim full版本,在full ...

  10. 细说 unicode 、utf-8 、utf-16、ascii 、gbk 、gb2312

    一.计算机的由来 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为”字节“.再后来,他们又做了一些可以处理这些 ...