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

时间:2023-02-25 13:17:12

Editor

Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 118    Accepted Submission(s): 38

Problem Description
HDU 4699 Editor (2013多校10,1004题)
 
Sample Input
8
I 2
I -1
I 1
Q 3
L
D
R
Q 2
 
Sample Output
2
3
Hint

The following diagram shows the status of sequence after each instruction:
HDU 4699 Editor (2013多校10,1004题)

 
Source
 
Recommend
zhuyuanchen520
 

这题只要用双向链表模拟一下。

查询最大前缀和,相当于维护一个单调队列。

 /* ***********************************************
Author :kuangbin
Created Time :2013/8/22 13:38:35
File Name :F:\2013ACM练习\2013多校10\1004.cpp
************************************************ */ #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int MAXN = ; int a[MAXN];
int next[MAXN],pre[MAXN],tot;
int NewNode()
{
next[tot] = -;
pre[tot] = -;
tot++;
return tot-;
}
int root;
int sum[MAXN];
vector<int>vec;
int now;
int n;
void init()
{
tot = ;
root = NewNode();
vec.clear();
n = now = ;
} void I(int x)
{
n++;
int t = NewNode();
a[t] = x;
pre[t] = now;
next[t] = next[now];
if(next[now] != -)pre[next[now]] = t;
next[now] = t;
now = t;
if(n == )
{
sum[n] = x;
vec.push_back(n);
}
else
{
sum[n] = sum[n-] + x;
int sz = vec.size();
if(sum[n] > sum[vec[sz-]])
vec.push_back(n);
}
}
void D()
{
if(n == )return;
int sz = vec.size();
if(vec[sz-] == n)
vec.pop_back();
n--;
int t = pre[now];
next[t] = next[now];
if(next[now] != -)pre[next[now]] = t;
now = t;
}
void L()
{
if(n == )return;
int sz = vec.size();
if(vec[sz-] == n)
vec.pop_back();
now = pre[now];
n--;
}
void R()
{
if(next[now] == -)return;
n++;
now = next[now];
if(n == )
{
sum[n] = a[now];
vec.push_back(n);
}
else
{
int sz = vec.size();
sum[n] = sum[n-] + a[now];
if(sum[n] > sum[vec[sz-]])
vec.push_back(n);
}
} int Q(int k)
{
int sz = vec.size();
if(vec[sz-] <= k)
return sum[vec[sz-]];
int t = upper_bound(vec.begin(),vec.end(),k) - vec.begin();
return sum[vec[t-]];
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int M;
int x;
char op[];
while(scanf("%d",&M) == )
{
init();
while(M--)
{
scanf("%s",&op);
if(op[] == 'I')
{
scanf("%d",&x);
I(x);
}
else if(op[] == 'D')
D();
else if(op[] == 'L')
L();
else if(op[] == 'R')
R();
else
{
scanf("%d",&x);
printf("%d\n",Q(x));
}
}
}
return ;
}

HDU 4699 Editor (2013多校10,1004题)的更多相关文章

  1. HDU 4669 Mutiples on a circle (2013多校7 1004题)

    Mutiples on a circle Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Oth ...

  2. HDU 4705 Y (2013多校10&comma;1010题,简单树形DP)

    Y Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submiss ...

  3. HDU 4704 Sum (2013多校10&comma;1009题)

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submi ...

  4. HDU 4696 Answers (2013多校10&comma;1001题 )

    Answers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  5. HDU 4679 Terrorist’s destroy &lpar;2013多校8 1004题 树形DP&rpar;

    Terrorist’s destroy Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  6. HDU 4658 Integer Partition (2013多校6 1004题)

    Integer Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. HDU—4699 Editor 双向链表&plus;子集和

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

  8. HDU 4741 Save Labman No&period;004 (2013杭州网络赛1004题,求三维空间异面直线的距离及最近点)

    Save Labman No.004 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  9. HDU 4666 Hyperspace (2013多校7 1001题 最远曼哈顿距离)

    Hyperspace Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

随机推荐

  1. &lbrack;LeetCode&rsqb; Reverse Vowels of a String 翻转字符串中的元音字母

    Write a function that takes a string as input and reverse only the vowels of a string. Example 1:Giv ...

  2. 假装这些是MyEclipse的快捷键&lpar;1&rpar;

    Java快捷键 Alt + / 代码自动补全Alt + Shift + S 功能菜单 Ctrl + 1 代码自动修正Ctrl + / 单行注释/取消Ctrl + O 查看类的所有方法Ctrl + T ...

  3. 给linux添加yum源。

    在玩linux的过程中,经常会下载一些源码包.软件大多是国外人写的,由于众所周知的原因,网络下载很慢. 所以想到了更新yum源的方法. 我的linux版本是CentOS6.3的. 以下参考百度. 1, ...

  4. android异步加载图片并缓存到本地实现方法

    图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略.今天首先介绍一下本地缓存图片     在android项目中访问网络图片是非常普遍性的事 ...

  5. 我对Backbone中url属性的理解

    Model中有一个url属性,而且有一个urlRoot属性. Collection中也有一个url属性. // 这是Model中的url方法 url: function() { var base = ...

  6. Google map v3 using simple tool file google&period;map&period;util&period;js v 1&period;1

    /** * GOOGLE地图开发使用工具 * @author BOONYACHENGDU@GMAIL.COM * @date 2013-08-23 * @notice 地图容器的z-index不能小于 ...

  7. mysql 开发进阶篇系列 48 物理备份与恢复&lpar;xtrabackup 的增量备份与恢复,以及备份总结&rpar;

    一.增量备份概述 xtrabackup  和innobackupex  二个工具都支持增量备份,这意味着能复制自上次备份以来更改的数据.可以在每个完整备份之间执行许多增量备份,因此,您可以设置一个备份 ...

  8. java&period;util&period;HashMap的简单介绍

    1. java.util.HashMap的底层实现是数组+链表. 2. 简介put(key, value)方法的执行过程: 1)通过key值,使用散列算法计算出来一个hash值,用来确定该元素需要存储 ...

  9. 关于PS抠图的各种方法 有这个就可以去面试了!!!加油!!!

    今天和大家说说关于PS抠图的方法 高手也就如此  你值得拥有!!好了 废话不多说 下面进入正题 首先:我们得分析所给的图 然后运用不同的方法,当然也可以相互灵活运用 1:不抠图 2:万能抠图方法:快速 ...

  10. 【转】浅谈React、Flux 与 Redux

    本文转自<浅谈React.Flux 与 Redux>,转载请注明出处. React React 是一个 View 层的框架,用来渲染视图,它主要做几件事情: 组件化 利用 props 形成 ...