【数据结构】单调栈
基本介绍之前没有写过栈 栈是只能在某一端插入和删除的特殊线性表 就像一个桶一样 我们可以用STL 也可以自己写 单调栈 故名思议 就是多了个 单调 的要求 模板题目洛谷p1901 发射站 输入输出格式 输入输出样例 题解中有讲解 代码实现3 4 2 3 5 6 10 #include<iostream> #include<cstdio> #include<cctype> #include<algorithm> using namespace std; #define ll long long #define in =read() const int size = 1000000 + 50; ll _stack[size],pos[size],b[size]; ll n,top,ans; struct data{ ll h,v; }a[size]; inline ll max(ll x,ll y) { return x>y?x:y; } inline ll read() { ll num=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-') f=-1; ch=getchar(); } while(isdigit(ch)){ num=num*10+ch-'0'; ch=getchar(); } return num*f; } inline void f (int x) { while(top&&_stack[top]<=a[x].h) top--; b[pos[top]]+=a[x].v; _stack[++top]=a[x].h; pos[top]=x; cout<<b[top]<<" "<<_stack[top]<<" "<<pos[top]<<endl; } int main() { int i; n in; for(i=1;i<=n;i++){ a[i].h in; a[i].v in; } for(i=1,top=0;i<=n;i++) f(i); for(i=n,top=0;i;i--) f(i); /* for(int i=0;i<=n;i++) { cout<<b[i]<<" "<<_stack[i]<<" "<<pos[i]; cout<<endl; }*/ for(i=1;i<=n;i++) ans=max(ans,b[i]); printf("%d",ans); } //COYG
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |