Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37413 | baka24 | 【S】T3 | C++ | 运行超时 | 36 | 2000 MS | 1304 KB | 1573 | 2025-03-30 12:36:53 |
#include<bits/stdc++.h> using namespace std; #define int long long #define it __int128 #define pii pair<it,int> #define fr first #define sc second #define mk make_pair #define pb push_back int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=500010,N=120,inf=1e9; int n,m,a[MAXN],f[MAXN],g[MAXN],k; it q[MAXN]; pii p[MAXN]; vector<pii>G[N+5]; void slv(){ n=read(); for(int i=1;i<=n;i++)a[i]=read(); for(int I=1;I<=n;I++){ int x=a[I]; k=0; while(x){ k++; p[k]=mk(x,k-1); x>>=1; } reverse(p+1,p+k+1); int tmp=0; for(int i=1;i<=k;i++){ for(int j=0;i+j<N;j++)G[i+j].pb(mk(p[i].fr<<j,p[i].sc+j)); } for(int i=1;i<N;i++){ for(auto o:G[i])p[++tmp]=o; G[i].clear(); } k=0; for(int i=1;i<=tmp;i++){ if(i==1||p[i].fr!=p[i-1].fr)p[++k]=p[i]; p[k].sc=min(p[i].sc,p[k].sc); } for(int i=1,j=1;i<=k;i++){ while(j<=m&&q[j]<=p[i].fr)j++; f[i]=g[j-1]+p[i].sc; } m=k; g[0]=inf; for(int i=1;i<=m;i++)g[i]=min(f[i],g[i-1]),q[i]=p[i].fr; } printf("%lld",g[m]); } signed main(){ // freopen("1.in","r",stdin);freopen("1.out","w",stdout); // int _=read();while(_--) slv(); // cerr<<(clock()*1.0/CLOCKS_PER_SEC)<<"s\n"; return 0; }