过于naive了= =作为一个知识点总结一下算了。主要就是合并。对于一个区间的最大字段和,可以分别事下面的两个区间的子段和,或者事左边的右边加右边的左边。然后搞一下 = =

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std; typedef long long ll;
const ll maxn = ; ll lson[maxn], rson[maxn], lm[maxn], rm[maxn], mans[maxn], sum[maxn];
ll ne = , root; ll build(ll l, ll r) {
ll now = ++ ne;
if(l ^ r) {
ll mid = (l + r) >> ;
lson[now] = build(l, mid);
rson[now] = build(mid + , r);
}
return now;
} void update(ll now) {
if(lson[now]) {
sum[now] = sum[lson[now]] + sum[rson[now]];
lm[now] = max(lm[lson[now]], sum[lson[now]] + lm[rson[now]]);
rm[now] = max(rm[rson[now]], sum[rson[now]] + rm[lson[now]]);
mans[now] = max(max(mans[lson[now]], mans[rson[now]]), lm[rson[now]] + rm[lson[now]]);
}
} void insert(ll now, ll l, ll r, ll v, ll pos) {
if(l == r) {
sum[now] = lm[now] = rm[now] = mans[now] = v;
}
else {
ll mid = (l + r) >> ;
if(pos <= mid) insert(lson[now], l, mid, v, pos);
else insert(rson[now], mid + , r, v, pos);
update(now);
}
} ll ask(ll now, ll l, ll r, ll ls, ll rs) {
ll ret;
if(l == ls && r == rs) ret = now;
else {
ll mid = (l + r) >> ;
if(rs <= mid) ret = ask(lson[now], l, mid ,ls, rs);
else if(ls >= mid + ) ret = ask(rson[now], mid + , r, ls, rs);
else {
ret = ++ ne;
ll rl = ask(lson[now], l, mid, ls, mid);
ll rr = ask(rson[now], mid + , r, mid + , rs);
lson[ret] = rl, rson[ret] = rr;
update(ret);
}
}
return ret;
} ll ll_get() {
ll x = ; char c = (char)getchar(); bool flag = ;
while(!isdigit(c) && c != '-') c = (char)getchar();
if(c == '-') flag = ;
while(!isdigit(c)) c = (char)getchar();
while(isdigit(c)) {
x = x * + (ll)(c - '');
c = (char)getchar();
}
if(flag) x = -x;
return x;
} ll n, m; void sov() {
n = ll_get(); root = build(, n);
for(ll i = ; i <= n; ++ i) {
ll a = ll_get();
insert(root, , n, a, i);
}
m = ll_get();
while(m --) {
ll ls, rs; ls = ll_get(), rs = ll_get();
ll ans = ask(root, , n, ls, rs);
printf("%lld\n", mans[ans]);
}
} int main() {
//freopen("test.in", "r", stdin);
//freopen("b.out", "w", stdout);
sov();
return ;
}

最大字段和--GSS1 MUSHROOM ORZ的更多相关文章

  1. UniEAP V4 WorkShop用户手册

    版权声明<UniEAP V4 WorkShop用户手册>的版权归东软集团(大连)有限公司所有.未经东软集团(大连)有限公司的书面准许,不得将本手册的任何部分以任何形式.采用任何手段(电子的 ...

  2. spoj gss1 gss3

    传送门 gss1 gss3 spoj gss系列=最大字段和套餐 gss1就是gss3的无单点修改版 有区间查询和单点修改,考虑用线段树维护 我们要维护区间权值和\(s\),区间最大前缀和\(xl\) ...

  3. Effective Java —— 多字段下考虑使用建造者模式构建实例

    本文参考 本篇文章参考自<Effective Java>第三版第二条"Consider a builder when faced with many constructor pa ...

  4. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  5. MySQL设置字段的默认值为当前系统时间

    问题产生: 当我们在对某个字段进行设置时间默认值,该默认值必须是的当前记录的插入时间,那么就将当前系统时间作为该记录创建的时间. 应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,应该由数据 ...

  6. Django admin定制化,User字段扩展[原创]

    前言 参考上篇博文,我们利用了OneToOneField的方式使用了django自带的user,http://www.cnblogs.com/caseast/p/5909248.html , 但这么用 ...

  7. 使用Expression实现数据的任意字段过滤(1)

    在项目常常要和数据表格打交道. 现在BS的通常做法都是前端用一个js的Grid控件, 然后通过ajax的方式从后台加载数据, 然后将数据和Grid绑定. 数据往往不是一页可以显示完的, 所以要加分页: ...

  8. 说说BPM数据表和日志表中几个状态字段的详细解释

    有个客户说需要根据这些字段的值作为判断条件做一些定制化需求,所以需要知道这些字段的名词解释,以及里面存储的值具体代表什么意思 我只好为你们整理奉上这些了! Open Work Sheet  0 Sav ...

  9. [DS] 标记字段

    标记字段 代码中有时候有这种需求:需要一个公共访问的标记字段,以下称为标记字段. 下面是案例: 一个订单详情页面,如果页面在显示中,程序中其它地方需要访问这个"正在查看中"的订单信 ...

随机推荐

  1. 64位 __int 与 long long写法

    在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647.而unsig ...

  2. printf sscanf进阶

    printf ; printf (3d", a);//将打印 035 printf(“%-*s”, width, string): “*”: 在这里用width代替,其实和printf(“% ...

  3. 利用jion阻塞主进程结束

    import time from multiprocessing import Process def run1(): for i in range(5): print("sunck is ...

  4. 微信小程序 封装接口

    1.util-util.js //封装接口 let baseURL = 'http://127.0.0.1:3000/'; //接口路径 let request = function (url, op ...

  5. 【转】SpringMVC整合websocket实现消息推送及触发

    1.创建websocket握手协议的后台 (1)HandShake的实现类 /** *Project Name: price *File Name:    HandShake.java *Packag ...

  6. Shiro学习(12)与Spring集成

    Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成. 在示 ...

  7. [HNOI2011]卡农 题解

    题目描述 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则.他将声音分成 n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 到 n 个音阶构成的 ...

  8. Android开发常用的Intent的URI及示例

    参考资料:http://www.oschina.net/code/snippet_166763_6502 //以下是常用到的Intent的URI及其示例,包含了大部分应用中用到的共用Intent. / ...

  9. ASP.NET Core学习——前言

    跌跌撞撞,公司的新项目终于要在这个月月底上线. 新项目使用ASP.NET Core来做,以前没接触过这方面的内容,只能一边学习,一边搞开发. 眼看项目上线在即,工作没那么忙,也不需要天天加班. 回想了 ...

  10. JAVA中HashMap相关知识的总结(一)

    Java中HashMap在jdk1.7和jdk1.8中的区别点: 在jdk1.7中是用数组+链表形式存储,1.8采用数组+链表/红黑树形式 Jdk1.8中由链表转为红黑树是长度大于8,由红黑树转为链表 ...