128. 编辑器
做法:对顶栈,其中中间的值为光标的位置。
详细思路
#include<iostream>
using namespace std;
const int N = 1000010;
int skl[N],skr[N],l,r;
int f[N],sum[N];
void add(int x){
skl[++l] = x;
sum[l] = sum[l-1] + x;
f[l] = max(f[l-1],sum[l]); //维护前缀和最大值
}
int main(){
cin.tie(0)->sync_with_stdio(false);
int Q; cin>>Q;
f[0] = -1e9;
while(Q--){
char c; cin>>c;
if(c == 'I'){
int x; cin>>x;
add(x);
} else if(c == 'D'){
if(l > 0) l--;
} else if(c == 'L') {
if(l > 0) skr[++r] = skl[l--];
} else if(c == 'R') {
if(r > 0) add(skr[r--]);
} else {
int k; cin>>k;
cout<<f[k]<<'\n';
}
}
return 0;
}