SPOJ GSS1 [线段树]
来源:互联网 发布:淘宝怎么设置起拍数量 编辑:程序博客网 时间:2024/05/29 21:28
Can you answer these queries I
题目连接
题解
普普通通的线段树区间合并,维护左、右、本身的值即可
#include <iostream> #include <cstdio> #include <algorithm> #define INF 0x3f3f3f3f using namespace std; struct node{ int sum,mx,lx,rx; node(int x = 0){ sum = mx = lx = rx = x; } }tree[1000001]; int ql,qr; node update(node x, node y){ node ans; ans.sum = x.sum + y.sum; ans.mx = max(x.rx + y.lx, max(x.mx, y.mx)); ans.lx = max(x.lx, x.sum + y.lx); ans.rx = max(y.rx, y.sum + x.rx); return ans; } void build(int num,int l,int r){ if(l == r){ int x; scanf("%d",&x); tree[num] = node(x); return ; } int mid = (l+r)>> 1; build(num*2,l,mid); build(num*2+1,mid+1,r); tree[num] = update(tree[num*2], tree[num*2+1]); } node query(int num,int l,int r){ if(ql <= l && r <= qr) return tree[num]; node x(-INF), y(-INF); x.sum=y.sum=0; int mid = (l+r)>> 1; if (ql <= mid) x = query(num*2,l,mid); if (qr > mid) y = query(num*2+1,mid+1,r); return update(x,y); } int main(){ int n,m; while(scanf("%d", &n)!=EOF){ build(1,1,n); scanf("%d",&m); while(m--){ scanf("%d%d",&ql,&qr); printf("%d\n", query(1,1,n).mx); } } return 0; }
阅读全文
0 0
- SPOJ GSS1 [线段树]
- SPOJ GSS1 第一次线段树
- SPOJ 1043 GSS1 zkw线段树
- [SPOJ GSS1] Can you answer these queries I [线段树]
- spoj GSS1
- SPOJ GSS1
- SPOJ 1043 Can you answer these queries I(GSS1 线段树)
- 【SPOJ-GSS1】Can you answer these queries I【线段树】【最大子段和】
- SPOJ GSS1 - Can you answer these queries I(线段树维护GSS)
- SPOJ GSS1 Can you answer these queries I (线段树求区间最大连续和)
- GSS1 线段数
- SPOJ MULTQ3 线段树
- SPOJ GSS3 线段树
- SPOJ GGS1 线段树
- SPOJ DWARFLOG 线段树
- SPOJ IITWPC4F 线段树
- SPOJ BGSHOOT 线段树
- SPOJ GSS1 & GSS3&挂了的GSS5
- Ubuntu 安装后的初始设置ssh、Mysql
- eclipse 编译器 unhandled event loop exception 异常解决办法
- tensorflow和python学习中遇到的问题
- 类的__str__()和__repr()__方法
- Ubuntu16.04安装卸载Kinetic
- SPOJ GSS1 [线段树]
- shell 中的日期date格式化
- HDU 1398-Square Coins(简单母函数)
- /*Oracle修改表结构*/
- 2、计算字符个数
- Python 2.7.x 和 3.x 版本的重要区别小结
- Codeforces 337D Book of Evil【树形Dp】好题~好题~
- ssh 本地转发 和远程转发 区别
- __repr__定义一个类的特定返回形式