Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
37422 baka24 【S】T3 C++ 运行超时 36 2000 MS 1424 KB 1861 2025-03-30 14:25:22

Tests(24/27):


#include<bits/stdc++.h> using namespace std; #define pii pair<int,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=200,inf=1e9; int n,m,a[MAXN],f[MAXN],g[MAXN],k; pii t[MAXN]; struct node{ int p,x,y; bool operator<=(const node&G)const{ return y!=G.y?y<G.y:x>G.x?(p<<x-G.x)<=G.p:p<=(G.p<<G.x-x); } bool operator!=(const node&G)const{ return y!=G.y?1:x>G.x?(p<<x-G.x)!=G.p:p!=(G.p<<G.x-x); } }q[MAXN]; pair<node,int> p[MAXN]; pair<node,int> G[N+5][N+5];int cnt[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++; t[k]=mk(x,k-1); x>>=1; } reverse(t+1,t+k+1); int tmp=0; for(int i=1;i<=k;i++){ for(int j=0;i+j<N;j++)G[i+j][++cnt[i+j]]=mk((node){t[i].fr,j,i+j},t[i].sc+j); } for(int i=1;i<N;i++){ for(int j=1;j<=cnt[i];j++)p[++tmp]=G[i][j]; cnt[i]=0; } 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("%d",g[m]); } signed main(){ // freopen("3.in","r",stdin);freopen("1.out","w",stdout); // int _=read();while(_--) slv(); // cerr<<(clock()*1.0/CLOCKS_PER_SEC)<<"s\n"; return 0; }


测评信息: