CF1406D:Three Sequences(贪心、构造)
生活随笔
收集整理的這篇文章主要介紹了
CF1406D:Three Sequences(贪心、构造)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
解析
本題說明了樣例的重要性
完全可以通過仔細觀察樣例得出一些結論
首先最大值顯然就是max?(b1,cn)\max(b_1,c_n)max(b1?,cn?)
考慮最優策略
如果a上升了,就讓b上升
因為假設前面都拼的嚴絲合縫了,讓c上升前面全得上升,肯定會對答案有影響,而修改b則不一定
如果a下降了,就讓c下降
類似的原因,如果讓b下降,就會影響到b1,那么b1小了,c1就會大,對答案產生影響
想到這些,后面維護差分就較為簡單了
代碼
#include<bits/stdc++.h> using namespace std; const int N=3e5+100; const int mod=1e9+7; double eps=1e-10; #define ll long long ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();};while(isdigit(c)){x=x*10+c-'0';c=getchar();};return x*f; }int n,m;ll d[N],a[N]; ll res; int main(){#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);#endifn=read();for(int i=1;i<=n;i++){a[i]=read();d[i]=a[i]-a[i-1];if(i>1) res+=max(0ll,d[i]);//printf("i=%d res=%lld\n",i,res);}res+=a[1];printf("%lld\n",(res+(res>=0))/2);m=read();for(int i=1;i<=m;i++){int l=read(),r=read(),x=read();if(l==1) res-=d[l];else res-=max(0ll,d[l]);d[l]+=x;if(l==1) res+=d[l];else res+=max(0ll,d[l]);//printf("d=%lld res=%lld\n",d[l],res);if(r<n){res-=max(0ll,d[r+1]);d[r+1]-=x;res+=max(0ll,d[r+1]);}printf("%lld\n",(res+(res>=0))/2);}return 0; } /* 2 3 7 4 9 9 1 2 8 3 1 4 2 4 */總結
以上是生活随笔為你收集整理的CF1406D:Three Sequences(贪心、构造)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BioWare 发布《质量效应》新游戏预
- 下一篇: 阿里云否认郑俊芳将去职执行董事、总经理: