「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系统造成的差异问题,那些恶心优秀的字符类模拟题就再也不用方了
转载于:https://www.cnblogs.com/hovny/p/10130751.html
「Luogu P2201」数列编辑器 解题报告相关推荐
- LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告
LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告 前置知识:闭区间上的连续函数的零点存在性定理: 我们定义这样的函数: 定义域为 [ l , r ] ∩ Z [l,r]\cap ...
- 「分块系列」数列分块入门3 解题报告
数列分块入门3 题意概括 区间加法,区间求前驱. 写在前面 这题的方法与分块2方法极其类似,建议自行解决. 正题 和上一题类似,但是二分不是用来计数的,而是用来求小于c的最大值的.然后对于不完整快,将 ...
- 「ZJOI2016」大森林 解题报告
「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...
- 「SDOI2014」数数 解题报告
「SDOI2014」数数 题目描述 我们称一个正整数 \(N\) 是幸运数,当且仅当它的十进制表示中不包含数字串集合 \(S\) 中任意一个元素作为其子串. 例如当 \(S=(\)22, 333, 0 ...
- tyvj P2018 「Nescafé26」小猫爬山 解题报告
P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...
- 「JLOI2015」战争调度 解题报告
「JLOI2015」战争调度 感觉一到晚上大脑就宕机了... 题目本身不难,就算没接触过想想也是可以想到的 这个满二叉树的深度很浅啊,每个点只会和它的\(n-1\)个祖先匹配啊 于是可以暴力枚举祖先链 ...
- 「洛谷P1343」地震逃生 解题报告
P1343 地震逃生 题目描述 汶川地震发生时,四川XX中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带, ...
- 「CH2101」可达性统计 解题报告
CH2101 可达性统计 描述 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到 ...
- 「洛谷P3469」[POI2008]BLO-Blockade 解题报告
P3469[POI2008]LO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个 ...
最新文章
- php正则引用不能计算,php正则表达式 后向引用~
- Vue开发规范1.0
- 销售订单行项目的装运点字段确认规则
- 源代码的下载和编译:
- 编程之美2014 热身赛 题目3 : 树上的三角形
- Win Form不能响应键盘事件
- Spring定时器技术终结者——采用XML配置的方式实现Spring定时器
- 电脑怎么开护眼模式_心累!整天对着手机电脑,到底该怎么护眼啊啊啊
- vue路由钩子函数(进入和离开钩子函数)
- 利用简单电阻分压原理自动测量电阻
- C语言 用指针 逆序存放数组
- 介绍现有三大前端框架-思想
- 「凹凸数据」历史文章合集,更新中
- 为何泽塔云GPU云能做到“云端的图形工作站,本地一致的使用体验”?
- 幼儿园监控_透明装饰_安全工地_放心食堂_多媒体教室基于视频流媒体能力解决方案
- i++和++i的区别
- js两个二维数组合并并去除相同项(整理)
- webstorm配置Prettier
- Educational Codeforces Round 124 (Rated for Div. 2)D. Nearest Excluded Points
- Oceanus的实时流式计算实践与优化
热门文章
- 一件事情没弄清楚,十有八九做不好
- es6+angular1.X+webpack 实现按路由功能打包项目
- java 导出excel学习小片段
- Revit API多选多重过滤
- python文件内容倒序_python实现对列表中的元素进行倒序打印
- iphone分辨率_AppStore今日推荐 iphone放大分辨率减少白噪点的照片处理工具
- python网络爬虫的流程图_基于Python的网络爬虫的设计与实现
- 软件测试经典面试题(一)给你一个水杯如何测试
- Connectivity Matrices(连通矩阵)
- 恒丰银行年报:以区块链等线上“大脑”再造业务流程