提交时间:2024-04-14 14:33:42
运行 ID: 28349
#include<bits/stdc++.h> #define int long long #define doub long double #define m_p make_pair #define pii pair<int,int> #define up(i,l,r) for(int i=(l);i<=(r);i++) #define dn(i,l,r) for(int i=(l);i>=(r);i--) using namespace std; const int maxn=1e6+7; int n; int a[maxn]; int lp[maxn]; int rs[maxn]; pii p[maxn]; signed main(){ cin>>n; up(i,1,n)cin>>a[i],p[i]=m_p(a[i],i); up(i,1,n)lp[i]=i-1,rs[i]=i+1; doub ans=0; sort(p+1,p+n+1); up(i,1,n){ doub fm=2; int ps=p[i].second; int l=ps,r=ps; doub sl=0,sr=0; up(j,1,30){ sl+=(l-lp[l])/fm; fm*=2; l=lp[l]; if(!l)break; } fm=2; up(j,1,30){ sr+=(rs[r]-r)/fm; fm*=2; r=rs[r]; if(r>n)break; } ans+=sl*sr*2*a[ps]; rs[lp[ps]]=rs[ps]; lp[rs[ps]]=lp[ps]; } cout<<ans/(n*n)<<endl; }