2016寒假训练——栈模拟

来源:HDU4699

就是一个模拟一个类似于栈的数据结构的题目。。。维护最大值。。。参考了题解。。。

#include <cstdio>  
#include <cstring>  
using namespace std;  
const int maxn = 1000006;  
int dp[maxn], sum[maxn], m, x;  
const int inf =  1e9+6;  
char op[3];  
int s1[maxn], s2[maxn], t1, t2;  //写双栈来进行模拟。。。
int main() {  
    while( ~scanf("%d", &m)) {  
        dp[0] = -inf;  
        t1 = t2 = 0;  
        while(m--) {  
            scanf("%s", op);  
            if(op[0] == 'I') {  
                scanf("%d", &x);  
                l[++t1] = x;  
                sum[t1] = sum[t1-1] + x;  
                dp[t1] = max(dp[t1-1], sum[t1]);  //动态规划思想
            }  
            else if(op[0] == 'L') {  
                if(!t1) continue;  
                s2[++t2] = s1[t1--];  
            }  
            else if(op[0] == 'R') {  
                if(!t2) continue;  
                s1[++t1] = s2[t2--];  
                sum[t1] = sum[t1-1] + l[t1];  
                dp[t1] = max(dp[t1-1], sum[t1]);  
  
            }  
            else if(op[0] == 'D') t1--;  
            else {  
                scanf("%d", &x);  
                printf("%d\n", dp[x]);  
            }  
        }  
  
    }  
    return 0;  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值