【题目分析】

GSS1的基础上增加修改操作。

同理线段树即可,多写一个函数就好了。

【代码】

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib> #include <map>
#include <set>
#include <queue>
#include <string>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 2000005
#define eps 1e-8
#define db double
#define ll long long
#define inf 0x3f3f3f3f
#define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i) void Finout()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
// freopen("wa.txt","w",stdout);
#endif
} ll Getll()
{
ll x=0,f=1; char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
return x*f;
} ll buf=100005,next[maxn],pos[maxn]; struct Node{
ll lx,rx,mx,sum;
Node operator + (Node x)
{
Node ret;
ret.lx=max(lx,sum+x.lx);
ret.rx=max(x.sum+rx,x.rx);
ret.sum=sum+x.sum;
ret.mx=max(max(mx,x.mx),max(rx+x.lx,max(ret.lx,ret.rx)));
return ret;
}
}t[maxn]; ll n,a[maxn],q,L,R,x,c; struct Problem{ll l,r,id,ans;}p[maxn]; bool cmp1(Problem x,Problem y)
{return x.l==y.l?x.r<y.r:x.l<y.l;}
bool cmp2(Problem x,Problem y)
{return x.id<y.id;} void Build(ll o,ll l,ll r)
{
if (l==r)
{
t[o].lx=t[o].rx=t[o].mx=t[o].sum=a[l];
return ;
}
ll mid=l+r>>1;
Build(o<<1,l,mid);
Build(o<<1|1,mid+1,r);
t[o]=t[o<<1]+t[o<<1|1];
} Node Query(ll o,ll l,ll r)
{
if (L<=l&&r<=R) return t[o];
ll mid=l+r>>1;
if (L>mid) return Query(o<<1|1,mid+1,r);
else if (R<=mid) return Query(o<<1,l,mid);
else return Query(o<<1,l,mid)+Query(o<<1|1,mid+1,r);
} void Modify(ll o,ll l,ll r)
{
if (l==r)
{
t[o].lx=t[o].rx=t[o].mx=t[o].sum=c;
return ;
}
ll mid=l+r>>1;
if (x<=mid) Modify(o<<1,l,mid);
else Modify(o<<1|1,mid+1,r);
t[o]=t[o<<1]+t[o<<1|1]; } int main()
{
Finout(); n=Getll();
// printf("%lld\n",n);
F(i,1,n) a[i]=Getll();
// F(i,1,n) printf("%lld ",a[i]);
// printf("\n");
Build(1,1,n); q=Getll();
F(i,1,q)
{
ll opt=Getll();
switch (opt)
{
case 1:
L=Getll();
R=Getll();
printf("%lld\n",Query(1,1,n).mx);
break;
case 0:
x=Getll();
c=Getll();
Modify(1,1,n);
break;
}
}
}

  

最新文章

  1. Computer vision labs
  2. Android代码故事第一回,平均间隔的按钮
  3. js-JavaScript高级程序设计学习笔记14
  4. CART
  5. My集合框架第五弹 最小堆
  6. 《算法问题实战策略》-chaper8-动态规划法
  7. 强迫症和拖延症患者如何应对马桶4(遨游Maxthon)“上次未关闭页面”丢失的问题
  8. 为什么函数式编程在Java中很危险?
  9. JS学习随手笔记
  10. Python使用Selenium/PhantomJS
  11. Usaco 2006Nov Round Numbers
  12. react 的进阶
  13. python调用GDAL实现几何校正
  14. day_10初级函数
  15. Create-react-app+Antd-mobile+Less配置(学习中的记录)
  16. BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)
  17. 理解 Delphi 的类(十) - 深入方法[18] - 在接口区声明的方法都相当于提前声明了
  18. com.jcraft.jsch.JSchException: Auth fail
  19. BZOJ4756:[USACO]Promotion Counting(线段树合并)
  20. 【Java面试题】37 说出ArrayList,Vector, LinkedList的存储性能和特性

热门文章

  1. Date/Time Functions and Operators (Postgres)
  2. Software Engineer(百赴美)
  3. 目后佐道IT教育:教学环境
  4. 动态规划初步--最长上升子序列(LIS)
  5. oracle数据比对工具
  6. fckeditor配置详解
  7. C#获得DataTable的key值
  8. 【数位dp】bzoj1833: [ZJOI2010]count 数字计数
  9. RN笔记
  10. CSS3-文本-text-shadow