/* ST图 模板 此模板以(洛谷)P2880 [USACO07JAN] Balanced Lineup G 为标准 通用大部分ST图的题 */ #include<iostream> #include<algorithm> #include<cmath> usingnamespace std; #define int long long
int a[maxn]; int f1[maxn][lg_maxn]; //max int f2[maxn][lg_maxn]; //min
voidinit()//计算 { for (int i=1;i<=n;i++) f1[i][0]=f2[i][0]=a[i]; int k=log(n)/log(2); for (int j=1;j<=k;j++) { for (int i=1;i<=n-(1<<j)+1;i++) { f1[i][j]=max(f1[i][j-1],f1[i+(1<<(j-1))][j-1]); //此处可以修改 f2[i][j]=min(f2[i][j-1],f2[i+(1<<(j-1))][j-1]); //此处可以修改 } } }
intquery(int l,int r)//查找 { int p=log(r-l+1)/log(2); returnmax(f1[l][p],f1[r-(1<<p)+1][p])-min(f2[l][p],f2[r-(1<<p)+1][p]); //此处可以修改 }
signedmain() { int n,m; cin >> n >> m; for (int i=1;i<=n;i++) cin >> a[i]; init(); for (int i=1;i<=m;i++) { int l,r; cin >> l >> r; cout << query(l,r) << endl; } return0; }
dp[0][0]=0; for (int i=1;i<=n;i++) { for (int j=0;j<dp[i-1].size();j++) { if (dp[i-1][j]==1e15) continue; dp[i][j]=min(dp[i][j],dp[i-1][j]); for (int k=1;k<=b[i];k++) { int nj=j+k+(k==b[i]?1:0); dp[i][nj]=min(dp[i][nj],dp[i-1][j]+k*a[i]); } } } int ans=1e15; for (int j=x;j<dp[n].size();j++) { if (dp[n][j]==1e15) continue; ans=min(ans,dp[n][j]+(j-x)*q); } cout << ans << endl; }