「Luogu P2201」数列编辑器 解题报告
数列编辑器,在线IDE
本期的主题是洛谷的在线IDE
小学生?!小学生虐我
思路:
怎么说链表也是可以的吧,虽然比较繁琐
然后涉及到了前缀和和一些优化手段(应该可以说是记忆化吧)?
用p记录光标的位置
虽然这道题的数据范围挺大的(1~1,000,000)
但是题目中说,k一定在p之前
所以实际上只有p前面的序列是有效的
于是我们就可以写一个半在线半离线的算法
用链表模拟数列
当然了,不用按照顺序,我们只用把数字存一下,然后顺序什么的一切靠链表解决
用 f数组 存i点(这里的i不是数列中的顺序,而是实际读入的顺序,下同,具体见代码)的最大前缀和,这样就可以直接查询
用 s数组 存i点的前缀和,方便更新f数组
然后用 ord数组 记录一下每个数在数列中的编号(不是实际的编号,有点类似hash的样子)
每接受一个操作就做一次更新
代码如下:
#include<bits/stdc++.h>
#define INF 0x7f7f7f7f
using namespace std;
struct node{
int f,t;//f表示前驱,t表示后继(由于本菜鸟不喜欢front和next……请谅解~)
int s;
}b[1000010];
int T,t,p,n;
int s[1000010];
int f[1000010];
int ord[1000010];
int read()//有负数,快读不要忘记符号的问题
{
int s=0,p=1;
char c=getchar();
while(!isdigit(c))
{
if(c=='-')
p=-1;
c=getchar();
}
while(isdigit(c))
{
s=(s<<1)+(s<<3)+c-'0';
c=getchar();
}
return s*p;
}
int main()
{
char c;
T=read();
f[0]=-INF;//因为有负数嘛,所以一开始前缀和的最大值应该是一个极小数
while(T--)
{
c=getchar();
while(c!='I'&&c!='D'&&c!='L'&&c!='R'&&c!='Q')
c=getchar();//getchar()比较快(优化后还有更快的),写c=='\n'||c=='\r'||c==' ',关系也不大
if(c=='I')
{
b[++t].s=read();
b[t].f=p;
b[b[p].t].f=t;
b[t].t=b[p].t;
b[p].t=t;
s[t]=s[p]+b[t].s;//插入节点
f[t]=max(f[p],s[t]);//更新当前的前缀和最大值
p=t;//更新光标位置
ord[++n]=p;//加入有价值的数列,并hash一下编号
}
if(c=='D')
{
b[b[p].t].f=b[p].f;
b[b[p].f].t=b[p].t;//删除节点
p=b[p].f;
n--;
}
if(c=='L')
{
p=b[p].f;
n--;
}
if(c=='R')
{
s[b[p].t]=s[p]+b[b[p].t].s;
f[b[p].t]=max(f[p],s[b[p].t]);
p=b[p].t;
ord[++n]=p;
}
if(c=='Q')
printf("%d\n",f[ord[read()]]);//这里可以好好理解一下
}//其实这里的五个操作可以合并起来写,放在函数里,然后可以调用
//比如说在'I'的操作里,可以看成是插入一个节点,然后在右移光标一位 这两步
//比较方便(其实也没方便多少)
return 0;
}
最后,再支持一下Luogu的
在线IDE!
极大解决Linux系统和Windows系统造成的差异问题,那些恶心优秀的字符类模拟题就再也不用方了
「Luogu P2201」数列编辑器 解题报告的更多相关文章
- 「Luogu P2278」[HNOI2003]操作系统 解题报告
题面 一道模拟题,模拟CPU的处理过程?!省选模拟题 思路: 模拟退火大法+优先队列乱搞 要注意的点 1.空闲时,CPU要处理进程 2.当队列中没有进程时,要先进行判断,然后访问 3.当优先级高的进程 ...
- 「Luogu P3183」[HAOI2016]食物链 解题报告
身为一个蒟蒻,由于刷不过[NOI2001]食物链 于是出门左转写了道另一道假的食物链 戳这里 这里的食物链个条数其实就是有向图的路径数(应该是这么说吧,我弱) 思路: 拓扑(Topulogy)(一本正 ...
- 「THUSCH 2017」大魔法师 解题报告
「THUSCH 2017」大魔法师 狗体面太长,帖链接了 思路,维护一个\(1\times 4\)的答案向量表示\(A,B,C,len\),最后一个表示线段树上区间长度,然后每次的操作都有一个转移矩阵 ...
- 「CTS2019 | CTSC2019」随机立方体 解题报告
「CTS2019 | CTSC2019」随机立方体 据说这是签到题,但是我计数学的实在有点差,这里认真说一说. 我们先考虑一些事实 如果我们在位置\((x_0,y_0,z_0)\)钦定了一个极大数\( ...
- 「BZOJ4510」「Usaco2016 Jan」Radio Contact 解题报告
无线电联系 Radio Contact 题目描述 Farmer John has lost his favorite cow bell, and Bessie the cow has agreed t ...
- 「Luogu P3866」[TJOI2009]战争游戏 解题报告
题面 好难表述啊~ 在n*m的矩阵上,有一些大兵(为0),一些空地(一个正整数),障碍物(-1),现在摧毁一些空地,使所有大兵不能走出矩阵去(代价为表示空地的整数),求最小代价 思路: 网络流最小割 ...
- 「Luogu P2015」二叉苹果树 解题报告
题面 一个二叉树,边数为n\((2<n\le 100)\),每条边有一个权值,求剪枝后剩下p\((1<p<n)\)条边,使p条边的权值和最大 还看不懂?-- 2 5 input:5 ...
- 「Luogu P2508」[HAOI2008]圆上的整点 解题报告
题面 给定圆的半径,求圆上整点数 这是一道很Nice的数学题!超爱!好吧,由于这道题,我去Study了一下复数(complex number)复杂的数 真棒!!! 有兴趣的戳这里!!!\(\huge ...
- 「Luogu P1210」回文检测 解题报告
题面 这是一道诡异的黄题 居然让你求一串吧啦吧啦的东西中 字母(大小写)最长的回文串的长度,还要输出完整的串 吐血 思路: 保持淡定,我们啥都不会,就会Manacher,那就用Manacher大法! ...
随机推荐
- 12 Top Open Source Data Analytics Apps
1. Hadoop It would be impossible to talk about open source data analytics without mentioning Hadoop. ...
- BZOJ 1935 Tree 园丁的烦恼 CDQ分治/主席树
CDQ分治版本 我们把询问拆成四个前缀和,也就是二维前缀和的表达式, 我们把所有操作放入一个序列中 操作1代表在x,y出现一个树 操作2代表加上在x,y内部树的个数 操作3代表减去在x,y内部树的个数 ...
- iptables 删除规则
iptables -nL --line-number显示每条规则链的编号 iptables -D FORWARD 2删除FORWARD链的第2条规则,编号由上一条得知.如果删除的是nat表中的链,记得 ...
- @noi.ac - 443@ 老头子的话
目录 @description@ @solution@ @accepted code@ @details@ @description@ 老头子是小学校长,小学生(大哥)们都很听老头子的话.一天,老头子 ...
- @noi.ac - 490@ game
目录 @description@ @solution@ @accepted code@ @details@ @description@ 小 Q 和小 T 正在玩一种双人游戏.m 张木牌从左往右排成一排 ...
- 20190608笔试题のCSS-属性继承
以下的CSS属性哪些可以继承?(单选) A. font-sizeB. marginC. widthD. padding emmm,这题答案是A,看到这题我是能选对的,但又不由让我想到一 ...
- poj 2689 Prime Distance (素数二次筛法)
2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西. 题意是,要求求出给定区间内相邻两个素数的最大和最小差. 二次筛法的意思其实就是先将1~sqrt ...
- 怎么查看mysql 的binlog日志存放的位置
image.png 这个你可以看配置文件 启用了才有这样的记录默认是没有的 linux系统中的/etc/my.cnf my.cnf内容: log-bin = mysqlbin # 默认配置 一般放在/ ...
- activiti工作流引擎之uel表达式
qq讨论群:313032825本人做了一个微信公众号,用于分享各类视频学习资源和我多年学习经验,喜欢的可以关注哦! 有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购 ...
- iptables端口映射
见上节透明代理设置 #iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.62.0/24 --dport 80 -j REDIRECT -- ...