小清新决策单调性 [ABC289G]
EnofTaiPeople · · 题解
Part1 题意简述
即
时间复杂度
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+6;
using ll=long long;
int T,n,m,c[N],b[N],p[N];
ll ans[N];
ll W(int l,int r){
return ll(b[l]+c[p[r]])*l;
}
void solve(int l,int r,int L,int R){
if(l>r||L>R)return;
int md=L+R>>1,i,nl=l;ll mx=W(l,md),nw;
for(i=r;i>l;--i)if((nw=W(i,md))>mx)mx=nw,nl=i;
ans[p[md]]=mx;
if(L<md)solve(l,nl,L,md-1);
if(md<R)solve(nl,r,md+1,R);
}
int main(){
ios::sync_with_stdio(false);
int i,x,y,l,r;
cin>>m>>n;
for(i=1;i<=m;++i)cin>>b[i];
for(i=1;i<=n;++i)cin>>c[i],p[i]=i;
sort(b+1,b+m+1,greater<int>());
sort(p+1,p+n+1,[&](int x,int y){return c[x]<c[y];});
solve(1,m,1,n);
for(i=1;i<=n;++i)printf("%lld%c",ans[i]," \n"[i==n]);
return 0;
}