Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
28406 LYLAKIOI 【J】T4 C++ 解答错误 0 1000 MS 155132 KB 1114 2024-04-14 15:42:05

Tests(0/10):


#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]; 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){ while(i<=n&&(a[i]<l||a[i]>r))i++; if(i>n)break; int rr=i; while(rr<=n&&a[i]>=l&&a[i]<=r)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(!s)break; 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; }


测评信息: