• 洛谷【P2201】数列编辑器


    我对模拟的理解:http://www.cnblogs.com/AKMer/p/9064018.html

    题目传送门:https://www.luogu.org/problemnew/show/P2201

    像这种容易让人产生“我已经一眼秒了这题”的感觉的题才是最致命的题……

    根据题意用链表模拟即可,主要思路看代码注解,都没啥好讲的。

    然而这题我却(Wa)了很多遍。

    震惊!某湖南(OI)选手竟痛(Wa)傻逼模拟题!原因竟是因为……

    我把“输出第(k)位及之前最大的前缀和”看成了“输出前(k)位前缀和”了……

    一眼秒题不是好习惯……自高自大不是好性格……稳一点总没错的……

    唉~~

    时间复杂度:(O(n));

    空间复杂度:(O(n));

    代码如下:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int maxn=1e6+5;
    
    char s[5];
    int n,now,tot,len;//now表示光标所在位置,len表示now前面一共有多少个数
    int sum[maxn],ans[maxn];//sum是前缀和,ans是前缀和最大值
    
    struct link_table {
    	int v,pre,nxt;//v是权值,pre是上一个位置,nxt是下一个位置
    }p[maxn];
    
    int read() {
    	int x=0,f=1;char ch=getchar();
    	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
    	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<1)+(x<<3)+ch-'0';
    	return x*f;
    }
    
    int main() {
    	n=read();
    	memset(ans,-63,sizeof(ans));//因为插入的数值可能为复数
    	p[0].nxt=1000000;
    	p[1000001].pre=0;
    	for(int i=1;i<=n;i++) {
    		scanf("%s",s+1);
    		if(s[1]=='I') {
    			int x=read(),a=now,b=++tot,c=p[now].nxt;
    			p[b].v=x,p[b].pre=a,p[b].nxt=c;
    			p[a].nxt=b,p[c].pre=b,now=b;
    			len++,sum[len]=sum[len-1]+x;
    			ans[len]=max(ans[len-1],sum[len]);
    		}
    		if(s[1]=='D'&&now) {
    			int a=p[now].pre,c=p[now].nxt;
    			p[a].nxt=c,p[c].pre=a;
    			len--,now=a;
    		}
    		if(s[1]=='L'&&now)len--,now=p[now].pre;
    		if(s[1]=='R'&&p[now].nxt!=1000001) {
    			len++,now=p[now].nxt;
    			sum[len]=sum[len-1]+p[now].v;
    			ans[len]=max(ans[len-1],sum[len]);
    		}
    		if(s[1]=='Q') {
    			int x=read();
    			printf("%d
    ",ans[x]);
    		}//链接表基本操作,只需要动态维护小于等于len的sum和ans就可以了
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    类的加载过程
    算法模板之基数排序
    算法模板之Dijkstra
    算法模板之SPFA
    算法模板之树状数组
    算法模板之排序
    深入JVM-自动内存管理(读书笔记)
    VMware Fault-Tolerant Virtual Machine 论文总结
    深入JVM--高效并发(读书笔记)
    欧拉素数筛
  • 原文地址:https://www.cnblogs.com/AKMer/p/9071291.html
Copyright © 2020-2023  润新知