计蒜客 48301 染色(简单)
- 如果不考虑特殊区间,对于每个元素来说,既可以染成黑色从而得到\(b_i\),
也可以染成白色从而得到\(w_i\),当然最好是染成黑色和白色两者中较大的从
而得到\(\max(b_i,w_i)\)。 - 现考虑特殊区间,由于本题已保证\(m\)个区间两两不相交,因此可以单独考
虑每个区间,如果把区间染成同一种颜色后得到的美感比第一步的最优决策
还要优,那么就按要求把区间染成同一种颜色;否则,就按第一步的最优决
策进行染色。
由于涉及到大量的区间和查询的操作,所以需要预处理前缀和。
const int N=3e5+10;
int b[N],w[N];
LL sumb[N],sumw[N],sum[N];
int n,m;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>b[i],sumb[i]=sumb[i-1]+b[i];
for(int i=1;i<=n;i++)
cin>>w[i],sumw[i]=sumw[i-1]+w[i];
for(int i=1;i<=n;i++)
sum[i]=sum[i-1]+max(b[i],w[i]);
LL res=sum[n];
while(m--)
{
int t,l,r,c;
cin>>t>>l>>r>>c;
LL inc=0;
if(t == 1)
inc=(sumb[r]-sumb[l-1]+c)-(sum[r]-sum[l-1]);
else
inc=(sumw[r]-sumw[l-1]+c)-(sum[r]-sum[l-1]);
if(inc > 0) res+=inc;
}
cout<<res<<endl;
//system("pause");
return 0;
}