POJ 3250 hair cut

来源:互联网 发布:宏业清单计价软件 编辑:程序博客网 时间:2024/05/22 00:17

神奇的单调栈


将i看见j转化成j能被i看见


维护一个单调减的栈,在push新的元素的时候,栈的大小就是,能够看的见当前元素的个数,


自己刚开始是没有建立这个转化关系,从后面考虑。实在考虑不到,宛如一个智障。


#include <iostream>#include <cstdio>#include <cstring>#include <stack>typedef long long ll;using namespace std;int main(){   // freopen("in.txt", "r", stdin);    int n;    ll heigh,ans;    stack<ll>s;    while(scanf("%d",&n)!=EOF)    {        ans=0;        cin>>heigh;        s.push(heigh);//入栈        for(int i=1;i<n;i++)        {            cin>>heigh;            while(!s.empty()&&s.top()<=heigh) //比較栈顶元素和新增加元素的关系            {                s.pop();            }           // cout << "pushing " << heigh << " " << s.size() << endl;            ans+=s.size();            s.push(heigh);        }        cout<<ans<<endl;        while(!s.empty()) s.pop();//空栈    }    return 0;}


0 0