zoukankan      html  css  js  c++  java
  • CF1406D Three Sequences(思维)

    我们发现由于b不减,c不增,所以如果ai>ai-1,那么就是b增加,不然就是c减少。因此最大值的答案就是max(b1+k,c1),k是两两之间大于0的差值。

    我们发现两个答案越接近答案越小,因此最后的答案就是(a1+k)/2上取整。而对于修改操作直接在差分数组上计算贡献即可,注意边界条件

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+10;
    ll a[N],b[N],c[N];
    ll s[N];
    ll half(ll x){
        if(x>=0) return x/2;
        else if(x%2==0) return x/2;
        else return x/2-1;
    }
    int main(){
        int i;
        int n;
        cin>>n;
        for(i=1;i<=n;i++){
            cin>>a[i];
        }
        for(i=1;i<=n;i++){
            s[i]=a[i]-a[i-1];
        }
        ll sum=a[1];
        for(i=2;i<=n;i++){
            sum+=max(0ll,s[i]);
        }
        cout<<half(sum+1)<<endl;
        int q;
        cin>>q;
        while(q--){
            int l,r,k;
            cin>>l>>r>>k;
            if(l!=1) sum-=max(s[l],0ll),s[l]+=k,sum+=max(s[l],0ll);
            else sum-=s[l],s[l]+=k,sum+=s[l];
            if(r!=n) sum-=max(s[r+1],0ll),s[r+1]-=k,sum+=max(s[r+1],0ll);
            cout<<half(sum+1)<<endl;
        }
    }
    View Code
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    scrapy+pymongo爬取小说实战
    Scrapy的正确安装
    linux: 用户管理,文件传送
    Java日期时间处理总结
    Numpy快速入门
    python 文件与文件夹操作
    python文件基础
    26. 删除排序数组中的重复项
    1两数之和
    152乘积最大子数组
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13681382.html
Copyright © 2011-2022 走看看