AtCoder Grand Contest 005 solution to a problem

Portal

\(A\)

Cuckoo

const int N=5e5+5;
char s[N];int res,n,sum;
int main(){
    scanf("%s",s+1),res=n=strlen(s+1);
    fp(i,1,n)if(s[i]=='S')++sum;
        else if(sum)--sum,res-=2;
    printf("%d\n",res);
    return 0;
}

\(B\)

Cuckoo

//quming
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
using namespace std;
typedef long long ll;
const int N=2e5+5,inf=0x3f3f3f3f;
int a[N],l[N],r[N],st[N],n,top;ll res;
int main(){
    scanf("%d",&n);
    fp(i,1,n)scanf("%d",&a[i]);
    a[0]=a[n+1]=0,st[++top]=0;
    fp(i,1,n){
        while(top&&a[i]<a[st[top]])--top;
        l[i]=st[top],st[++top]=i;
    }
    st[top=1]=n+1;
    fd(i,n,1){
        while(top&&a[i]<a[st[top]])--top;
        r[i]=st[top],st[++top]=i;
    }
    fp(i,1,n)res+=1ll*a[i]*(i-l[i])*(r[i]-i);
    printf("%lld\n",res);
    return 0;
}

Guess you like

Origin www.cnblogs.com/yuanquming/p/11361628.html