计蒜客 48301 染色(简单)

  1. 如果不考虑特殊区间,对于每个元素来说,既可以染成黑色从而得到(b_i)
    也可以染成白色从而得到(w_i),当然最好是染成黑色和白色两者中较大的从
    而得到(max(b_i,w_i))
  2. 现考虑特殊区间,由于本题已保证(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;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14615790.html