提交时间:2024-04-14 15:36:40
运行 ID: 28400
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define p_b push_back using namespace std; typedef long long ll; const int maxn=1e5+10,mod=1e9+7; inline ll read(){ ll x=0;short t=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')t=-1;ch=getchar(); }while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,a[maxn],B[maxn]; ll f[2][105][maxn],res[maxn]; void sol(int l,int r){ up(i,1,n)f[l&1][r][i]=0; up(i,1,n)B[i]=(a[i]>=l&&a[i]<=r); ll t=0; up(i,1,n){ while(i<=n&&(!B[i]))i++; if(i>n)break; int rr=i; while(rr<=n&&B[rr])rr++; up(j,1,rr-i)f[l&1][r][j]+=rr-i-j+1; i=rr; } } void slv(){ n=read();up(i,1,n)a[i]=read(); up(r,1,100)sol(1,r); up(l,1,100){ up(r,l+1,100)sol(l+1,r); up(r,l,100){ up(j,1,n){ ll s=f[l&1][r][j]; if(l<=r-1)s-=f[l&1][r-1][j]+f[!(l&1)][r][j]; if(l+1<=r-1)s+=f[!(l&1)][r-1][j]; s*=l,s*=r; res[j]+=s; } } } up(i,1,n)printf("%lld ",res[i]);printf("\n"); } int main(){ slv(); return 0; }