过于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. 四大开源协议比较:BSD、Apache、GPL、LGPL(转)

    转自: 四大开源协议比较:BSD.Apache.GPL.LGPL 本文参考文献:http://www.fsf.org/licensing/licenses/ 现今存在的开源协议很多,而经过Open S ...

  2. vue指令系统

    一.vue基础 使用vue需在官网上先下载vue.js,网址:https://cn.vuejs.org/v2/guide/installation.html.然后: 在project中引入vue.js ...

  3. element 点击切换按钮的颜色

    1.html <el-button-group label="时间"> <el-button @click="seeHour" :type=& ...

  4. css 一行内显示 超出自动隐藏

    一般的文字截断(适用于内联与块): Example Source Code [www.mb5u.com].text-overflow {display:block;/*内联对象需加*/width:31 ...

  5. MySQL中可能遇到的问题及解决方法

    一.在创建存储函数时,出现错误: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQLDA ...

  6. java中EL表达式怎么获取网站的根目录

    ${pageContext.request.contextPath} <a href="${pageContext.request.contextPath}/login.jsp&quo ...

  7. apue第4章习题

    4.1 用 stat 函数替换图 4-3 程序中的 lstat函数,如若命令行残数之一是符号链接,会发生什么变化? stat不支持链接,如果有参数是链接符号,会显示链接后的文件属性. 4.2 如果文件 ...

  8. Android项目中引用到其他工程

    有的时候我们需要在现有的项目中引用到其他项目的资源和文件,当然我们可以将被引用的工程打成jar包,但是这有个缺点就是,这个改动比较麻烦,除非是被引用的工程的资源和源程序文件不再改动,可以这样做,否则每 ...

  9. AcWing 202. 最幸运的数字 (欧拉定理)打卡

    8是中国的幸运数字,如果一个数字的每一位都由8构成则该数字被称作是幸运数字. 现在给定一个正整数L,请问至少多少个8连在一起组成的正整数(即最小幸运数字)是L的倍数. 输入格式 输入包含多组测试用例. ...

  10. jmter 二次开发 IDEA 项目5.1

    jmter 二次开发 IDEA 项目5.1 IDEA 编译 Jmeter 5.0(二次开发) 1. Java环境配置 1.1     步骤1 1.2     步骤2 1.3     步骤3 1.4   ...