Gravatar
TeaWine
积分:103
提交:12 / 33

有一说一,其实挺水


做一个以身高为关键字的单调栈储存每个奶牛的序号,再单独以一个数组存储身高,在弹出时处理它对答案的贡献,显然为当前序号到它的序号的差减一


最后注意一下数据大小开个longlong


#include<bits/stdc++.h>
using namespace std;

int n,a[110086],tmp,c[110086],num;

int main () {
    freopen("hair.in","w",stdin);
    freopen("hair.out","r",stdout);

    cin>>n;
    
    for(int i = 1; i<=n; i++){
        int y;
        cin>>y;
        
        while(y>=c[a[tmp-1]]&&tmp>0){
            num+=i-a[tmp-1]-1;
            tmp--;
        }
        c[i]=y;
        a[tmp++]=i;
    }
    while(tmp>0){
    if(a[tmp-1]!=n)num+=n-a[tmp-1];
    tmp--;
    }
    cout<<num;
    return 0;
}



题目1746  [POJ 3250]乱头发节 AAAAAAAAAA      评论
2025-03-29 11:35:26