最大字段和--GSS1 MUSHROOM ORZ
过于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的更多相关文章
- UniEAP V4 WorkShop用户手册
版权声明<UniEAP V4 WorkShop用户手册>的版权归东软集团(大连)有限公司所有.未经东软集团(大连)有限公司的书面准许,不得将本手册的任何部分以任何形式.采用任何手段(电子的 ...
- spoj gss1 gss3
传送门 gss1 gss3 spoj gss系列=最大字段和套餐 gss1就是gss3的无单点修改版 有区间查询和单点修改,考虑用线段树维护 我们要维护区间权值和\(s\),区间最大前缀和\(xl\) ...
- Effective Java —— 多字段下考虑使用建造者模式构建实例
本文参考 本篇文章参考自<Effective Java>第三版第二条"Consider a builder when faced with many constructor pa ...
- XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法
在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...
- MySQL设置字段的默认值为当前系统时间
问题产生: 当我们在对某个字段进行设置时间默认值,该默认值必须是的当前记录的插入时间,那么就将当前系统时间作为该记录创建的时间. 应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,应该由数据 ...
- Django admin定制化,User字段扩展[原创]
前言 参考上篇博文,我们利用了OneToOneField的方式使用了django自带的user,http://www.cnblogs.com/caseast/p/5909248.html , 但这么用 ...
- 使用Expression实现数据的任意字段过滤(1)
在项目常常要和数据表格打交道. 现在BS的通常做法都是前端用一个js的Grid控件, 然后通过ajax的方式从后台加载数据, 然后将数据和Grid绑定. 数据往往不是一页可以显示完的, 所以要加分页: ...
- 说说BPM数据表和日志表中几个状态字段的详细解释
有个客户说需要根据这些字段的值作为判断条件做一些定制化需求,所以需要知道这些字段的名词解释,以及里面存储的值具体代表什么意思 我只好为你们整理奉上这些了! Open Work Sheet 0 Sav ...
- [DS] 标记字段
标记字段 代码中有时候有这种需求:需要一个公共访问的标记字段,以下称为标记字段. 下面是案例: 一个订单详情页面,如果页面在显示中,程序中其它地方需要访问这个"正在查看中"的订单信 ...
随机推荐
- 2、Python 基础类型 -- String 字符串类型
字符串常用的方法: 1.分割:string.split(str="", num=string.count(str)) 以 str 为分隔符切片 string,如果 num 有指 ...
- leetcood学习笔记-35-二分法
题目: 第一次提交; class Solution: def searchInsert(self, nums: List[int], target: int) -> int: for i in ...
- js面向对象编程(第2版)——js继承多种方式
附带书籍地址: js面向对象编程(第2版)
- bootstrap 的 datetimepicker,同时有日期和时间, 且开始时间要早于结束时间
首先,引入jquery, bootstrap 和 bootstrap-datetimepicker datetimepicker的下载地址: http://www.bootcss.com/p/boot ...
- linux centos6安装postgresql
参考:https://blog.csdn.net/zhu_xun/article/details/21234663 参考:https://www.cnblogs.com/jimcsharp/p/857 ...
- 1.4 React 组件生命周期
1.4.1 组件 React 中组件有自己的生命周期方法,简单理解可以为组件从 出生(实例化) -> 激活 -> 销毁 生命周期 hook.通过这些 hook 方法可以自定义组件的特性. ...
- 21. Jmeter对数据库进行压力测试
测试工作中有时候会对数据库进行压力测试,jmeter实现这个需求较为简单,在这里简单介绍下.可以参考我之前写的 15. Jmeter-配置元件二 步骤: 1.选中测试计划,添加mysql-connec ...
- Hyperledger:名词解释
架构概念: VSCC (Validation System Chaincode) Auditability(审计性):在一定权限和许可下,可以对链上的交易进行审计和检查. Block(区块):代表一批 ...
- scala 实现算法
快速排序 def sort(xs: Array[Int]): Array[Int] = if (xs.length <= 1) xs else { val pivot = xs(xs.lengt ...
- Redis数据结构之压缩列表-ziplist
为了节约内存,在zset和hash容器对象元素个数较少时,Redis会采用压缩列表(ziplist)进行存储. 压缩列表是一块连续的内存空间,元素之间紧挨着存储,不存在冗余 一个压缩列表可以包含任意多 ...