HDU 4699 Editor(双向链表)
双向链表直接模拟。
用一个辅助数组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(双向链表)相关推荐
- hdu 4699 Editor(splay tree 伸展树)
hdu 4699 Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和.. 解题思路:标乘是用了栈进行维 ...
- hdu 4699 Editor(Splay)
题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和. Splay在比赛的时候写得太Navie,T了整场. 左移和右移的 ...
- hdu 4699 2个栈维护 or 伸展树 (2013多校联合)
hdu 4699 Editor 题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求1到k位置的最大的前缀和.. 注意这里的k是在光标之前的 ...
- Editor HDU 4699
题目 #include <iostream> using namespace std;const int N = 1e6 + 10; int p[2], a[N], b[N], sum[N ...
- 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中如 ...
- 【HDOJ】4699 Editor_天涯浪子_新浪博客
[题目] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [报告] 模拟题吧,本身不是很难. 最初的想法是用Splay tree写,然后疯掉了.苏牛说2B ...
- HDU - 5381 The sum of gcd(莫队/线段树区间合并)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答区间 [L,R][L,R][L,R] 内所有子区间的 gcdgcdgcd 之和.更具体的,对于询问 ...
- HDU - 7091 重叠的子串(后缀自动机+set启发式合并+树上倍增)
题目链接:点击查看 题目大意:给定一个只含小写字母的字符串 sss 和 qqq 次询问,每次询问给定一个字符串,以 s[l..r]s[l..r]s[l..r] 的形式给出,判断 sss 中是否存在两个 ...
- 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] 内 " ...
- HDU多校4 - 6992 Lawn of the Dead(线段树+模拟)
题目链接:点击查看 题目大意:给出一个 n∗mn*mn∗m 的矩阵,有 kkk 个点被 banbanban 掉了,现在从点 (1,1)(1,1)(1,1) 出发,只能向右或向下移动,问可以到达的点有多 ...
最新文章
- 3.2.5 端到端的学习
- OpenCV iOS-视频处理
- JMS 2.0的新增功能
- ASP.NET 网页之间传递值
- webgis 行政图报错_WebGIS 地图 示例源码下载
- 集群负载均衡之lvs和keepalived
- C语言函数的递归调用
- linux 合并多个文本文件到一个文件*.txt1.txt,合并多个文本文件方法
- 刘士颉老师——德鲁克“卓有成效”管理理论的践行者,曾任宜信公司培训负责人
- 联通UPhone计划是国家重大专项?
- MT6627处理器芯片资料介绍
- 认识 Arduino 开发板
- 好斗or炒作?甲骨文“撕咬”过的那些对手 - 爱上英语题库系统|郭雄飞
- 论文中的定理(Theorem)、引理(Lemma)、推论(Corollary)
- Android文档管理器
- 高德地图 key 和 安全密钥 的使用
- 并发导致java对象错乱
- 电视打开显示本网络无电视服务器,当贝市场教你网络机顶盒显示无信号怎么办?...
- kingview3d在楼宇行业的应用
- python简单的批量下载脚本
热门文章
- 配置管理的目标和主要活动
- 汉语拼音分音节的程序
- matlab怎么表示分块矩阵,急求一个测量矩阵采用分块多项式矩阵时怎样引用的代码!!!...
- 官方完整HL7 ECG-XML例子及注释翻译(4)
- 2019冬令营集训1月7-10日总结
- 【转帖】mysql锁机制
- 电脑ping手机该怎么玩(很多网友都说电脑ping不通手机)
- MacBook Air开启CPU虚拟化支持(Windows10)
- tplink 智能dhcp服务器,tplink路由器设置:桥接提示“获取IP地址失败,请检查主路由器DHCP服务器是否开启”...
- Pycharm新建项目,new environment 和 existing interpreter的区别