双向链表直接模拟。

用一个辅助数组maxSum来维护一下前k项中[1,k]的最大和。

因为光标是一格一格的移动,所以每次光标右移的时候动态更新一下即可。

时间复杂度O(n)。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>using namespace std;const int MAXN = 1000100;
const int INF = 1 << 30;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 ) == 1 ){head->pre = NULL;head->next = NULL;node *cur = head;maxSum[0] = -INF;sum[0] = 0;int pos = 0;char op[4];int a;for ( int i = 0; i < Q; ++i ){scanf( "%s", op );if ( op[0] == 'I' ){scanf( "%d", &a );++pos;sum[pos] = sum[pos-1] + a;maxSum[pos] = max( sum[pos], maxSum[pos-1] );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[0] == 'Q' ){scanf( "%d", &a );if ( pos < a ) a = pos;printf( "%d\n", maxSum[a] );}else if ( op[0] == 'L' ){if ( cur->pre != NULL ){cur = cur->pre;--pos;}}else if ( op[0] == 'R' ){//printf( "cur->next=%d %d\n", cur->next, NULL );if ( cur->next != NULL ){cur = cur->next;++pos;sum[pos] = sum[pos - 1] + cur->val;maxSum[pos] = max( sum[pos], maxSum[pos-1] );}}else if ( op[0] == '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 0;
}

转载于:https://www.cnblogs.com/GBRgbr/p/3307829.html

HDU 4699 Editor(双向链表)相关推荐

  1. hdu 4699 Editor(splay tree 伸展树)

    hdu 4699  Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 解题思路:标乘是用了栈进行维 ...

  2. hdu 4699 Editor(Splay)

    题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和. Splay在比赛的时候写得太Navie,T了整场. 左移和右移的 ...

  3. hdu 4699 2个栈维护 or 伸展树 (2013多校联合)

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

  4. Editor HDU 4699

    题目 #include <iostream> using namespace std;const int N = 1e6 + 10; int p[2], a[N], b[N], sum[N ...

  5. java web自动生成编号_2013-8-6 10:56:07 JAVA_WEB:员工号自动生成源代码

    create table user_info_temp ( usId varchar2(20), usNo varchar2(20), usName varchar2(50) ) --oracle中如 ...

  6. 【HDOJ】4699 Editor_天涯浪子_新浪博客

    [题目] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [报告] 模拟题吧,本身不是很难. 最初的想法是用Splay tree写,然后疯掉了.苏牛说2B ...

  7. HDU - 5381 The sum of gcd(莫队/线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答区间 [L,R][L,R][L,R] 内所有子区间的 gcdgcdgcd 之和.更具体的,对于询问 ...

  8. HDU - 7091 重叠的子串(后缀自动机+set启发式合并+树上倍增)

    题目链接:点击查看 题目大意:给定一个只含小写字母的字符串 sss 和 qqq 次询问,每次询问给定一个字符串,以 s[l..r]s[l..r]s[l..r] 的形式给出,判断 sss 中是否存在两个 ...

  9. HDU多校4 - 6989 Didn‘t I Say to Make My Abilities Average in the Next Life?!(单调栈)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问给出一个区间 [l,r][l,r][l,r],要求输出区间 [l,r][l,r][l,r] 内 " ...

  10. HDU多校4 - 6992 Lawn of the Dead(线段树+模拟)

    题目链接:点击查看 题目大意:给出一个 n∗mn*mn∗m 的矩阵,有 kkk 个点被 banbanban 掉了,现在从点 (1,1)(1,1)(1,1) 出发,只能向右或向下移动,问可以到达的点有多 ...

最新文章

  1. 3.2.5 端到端的学习
  2. OpenCV iOS-视频处理
  3. JMS 2.0的新增功能
  4. ASP.NET 网页之间传递值
  5. webgis 行政图报错_WebGIS 地图 示例源码下载
  6. 集群负载均衡之lvs和keepalived
  7. C语言函数的递归调用
  8. linux 合并多个文本文件到一个文件*.txt1.txt,合并多个文本文件方法
  9. 刘士颉老师——德鲁克“卓有成效”管理理论的践行者,曾任宜信公司培训负责人
  10. 联通UPhone计划是国家重大专项?
  11. MT6627处理器芯片资料介绍
  12. 认识 Arduino 开发板
  13. 好斗or炒作?甲骨文“撕咬”过的那些对手 - 爱上英语题库系统|郭雄飞
  14. 论文中的定理(Theorem)、引理(Lemma)、推论(Corollary)
  15. Android文档管理器
  16. 高德地图 key 和 安全密钥 的使用
  17. 并发导致java对象错乱
  18. 电视打开显示本网络无电视服务器,当贝市场教你网络机顶盒显示无信号怎么办?...
  19. kingview3d在楼宇行业的应用
  20. python简单的批量下载脚本

热门文章

  1. 配置管理的目标和主要活动
  2. 汉语拼音分音节的程序
  3. matlab怎么表示分块矩阵,急求一个测量矩阵采用分块多项式矩阵时怎样引用的代码!!!...
  4. 官方完整HL7 ECG-XML例子及注释翻译(4)
  5. 2019冬令营集训1月7-10日总结
  6. 【转帖】mysql锁机制
  7. 电脑ping手机该怎么玩(很多网友都说电脑ping不通手机)
  8. MacBook Air开启CPU虚拟化支持(Windows10)
  9. tplink 智能dhcp服务器,tplink路由器设置:桥接提示“获取IP地址失败,请检查主路由器DHCP服务器是否开启”...
  10. Pycharm新建项目,new environment 和 existing interpreter的区别