Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
28487 | baka24 | 【BJ】T1 | C++ | 解答错误 | 0 | 2000 MS | 211216 KB | 1778 | 2024-04-14 19:44:19 |
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fr first #define sc second #define mk make_pair #define lson t[now].ls #define rson t[now].rs const int MAXN=1000010,N=32,inf=1000000000; int n,a[MAXN],b[MAXN],f[N+5][MAXN],lg2[MAXN]; int qry(int l,int r){ if(l<1||r>n)return -1; int g=lg2[r-l+1]; return max(f[g][l],f[g][r-(1<<g)+1]); } int l[MAXN],r[MAXN],ll,rr; double jc[MAXN],ans; pair<int,int>A[MAXN]; int nex[MAXN],lst[MAXN]; int fidl(int x){ if(lst[x]==x)return x; return lst[x]=fidl(lst[x]); } int fidr(int x){ if(nex[x]==x)return x; return nex[x]=fidr(nex[x]); } void slv(){ scanf("%lld",&n); jc[0]=1;jc[1]=0.5; for(int i=2;i<=MAXN-5;i++)lg2[i]=lg2[i>>1]+1,jc[i]=jc[i-1]/2; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); nex[i]=lst[i]=i; f[0][i]=a[i];A[i]=mk(a[i],i); } for(int i=1;1<<i<=n;i++){ for(int j=1;j<=n;j++){ f[i][j]=max(f[i-1][j],f[i-1][j+(1<<i-1)]); } } sort(A+1,A+n+1); for(int I=1;I<=n;I++){int i=A[I].sc; cout<<i<<":"<<endl; int L=i,R=i;ll=rr=0; l[0]=r[0]=i; double LL=0,RR=0; for(int j=1;j<=30;j++){ int tmp=fidl(L)-1; LL+=(tmp-L)*jc[j]; cout<<tmp<<" "; L=tmp; if(L<1)break; }cout<<endl; for(int j=1;j<=30;j++){ int tmp=fidr(R)+1; RR+=(R-tmp)*jc[j]; R=tmp; cout<<tmp<<" "; if(R>n)break; }cout<<endl; ans+=a[i]*2*LL*RR; nex[i-1]=i;lst[i+1]=i; } printf("%.5f",ans/n/n); } signed main(){ slv(); return 0; }