博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spoj1716 Can you answer these queries III
阅读量:6246 次
发布时间:2019-06-22

本文共 1318 字,大约阅读时间需要 4 分钟。

(分析见正睿2018.10.1笔记)

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;struct node { int pre,sur,ans,sum;};node d[200100];inline node work(node x,node y){ node res; res.sum=x.sum+y.sum; res.pre=max(x.pre,x.sum+y.pre); res.sur=max(y.sur,y.sum+x.sur); res.ans=max(max(x.ans,y.ans),x.sur+y.pre); return res;}inline void update(int le,int ri,int wh,int pl,int k){ if(le==ri){ d[wh].pre=d[wh].sur=d[wh].ans=d[wh].sum=k; return; } int mid=(le+ri)>>1; if(mid>=pl)update(le,mid,wh<<1,pl,k); else update(mid+1,ri,wh<<1|1,pl,k); d[wh]=work(d[wh<<1],d[wh<<1|1]); return; }inline node q(int le,int ri,int wh,int x,int y){ if(le>=x&&ri<=y){ return d[wh]; } int mid=(le+ri)>>1,cnt=0; node a,b; if(mid>=x)cnt+=1,a=q(le,mid,wh<<1,x,y); if(mid
<<1|1,x,y); if(cnt==1)return a; if(cnt==2)return b; return work(a,b);} int main(){ int n,m,i,j,k,x,y; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&x); update(1,n,1,i,x); } scanf("%d",&m); for(i=1;i<=m;i++){ scanf("%d%d%d",&k,&x,&y); if(k==0){ update(1,n,1,x,y); }else { printf("%d\n",q(1,n,1,x,y).ans); } } return 0;}

转载于:https://www.cnblogs.com/yzxverygood/p/9748495.html

你可能感兴趣的文章
空间统计笔记之二(分布模式工具集,Analyzing Patterns Toolset)
查看>>
一定要为了成功才去创业吗?
查看>>
4.2 列表生成式、迭代器与生成器
查看>>
Sql Server系列:分区表操作
查看>>
myeclipse maven tomcat插件 创建web工程
查看>>
2.java线程之ThreadLocal
查看>>
Unsafe 的简单使用
查看>>
明确价值体现
查看>>
myeclipse修改内存大小不足tomcat内存不足
查看>>
C++STL学习笔记_(2)deque双端数组知识
查看>>
CodeFoces 489E 01分数规划(二分的dp)
查看>>
浅谈CSRF攻击方式[转]
查看>>
一道淘汰85%面试者的百度开发者面试题参考答案
查看>>
如何将Drawable转为Bitmap?
查看>>
微信公众平台消息接口开发(4)
查看>>
VB控件间的拖放
查看>>
token 验证的逻辑
查看>>
机器学习算法之概率分类法
查看>>
phone8 in-app purchasing
查看>>
Git 常用命令
查看>>