码迷,mamicode.com
首页 > 其他好文 > 详细

Luogu【P1901】发射站(单调栈)

时间:2017-06-21 21:02:20      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:ack   tps   http   ref   nbsp   struct   file   namespace   etc   

题目链接

题目说明比自己矮的塔收不到自己的能量,摆明了就是单调栈呗。

把比自己矮的全都从栈里弹出去,于是碰到第一个比自己高的。让他接受自己发射的能量。

当然由于发射站发射的能量有两个方向,所以正反两遍。

然后 放代码。

#include<cstdio>
#include<cstdlib>
#include<cctype>
using namespace std;

long long ans;

inline long long max(long long a,long long b){    return a>b?a:b;    }

const int size=2000000;

long long stack[size],top;

inline long long read(){
    long long num=0,f=1;
    char ch=getchar();
    while(!isdigit(ch)){
        if(ch==-)    f=-1;
        ch=getchar();
    }
    while(isdigit(ch)){
        num=(num<<1)+(num<<3)+ch-0;
        ch=getchar();
    }
    return num*f;
}

struct file{
    long long h;
    long long v;
    long long c;
}que[size];


int main(){
    int n=read();
    for(int i=1;i<=n;++i){
        que[i].h=read();
        que[i].v=read();
    }
    for(int i=1;i<=n;++i){
        while(top&&que[stack[top]].h<=que[i].h)    top--;
        que[stack[top]].c+=que[i].v;
        stack[++top]=i;
    }
    top=0;
    for(int i=n;i>0;--i){
        while(top&&que[stack[top]].h<=que[i].h)    top--;
        que[stack[top]].c+=que[i].v;
        stack[++top]=i;
    }
    for(int i=1;i<=n;++i)    ans=max(ans,que[i].c);
    printf("%lld",ans);
    return 0;
}

 

Luogu【P1901】发射站(单调栈)

标签:ack   tps   http   ref   nbsp   struct   file   namespace   etc   

原文地址:http://www.cnblogs.com/cellular-automaton/p/7061532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!