最大字段和--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] 标记字段
标记字段 代码中有时候有这种需求:需要一个公共访问的标记字段,以下称为标记字段. 下面是案例: 一个订单详情页面,如果页面在显示中,程序中其它地方需要访问这个"正在查看中"的订单信 ...
随机推荐
- Codeforces Round #568 (Div. 2) G2. Playlist for Polycarp (hard version)
因为不会打公式,随意就先将就一下? #include<cstdio> #include<algorithm> #include<iostream> #include ...
- IO流分类
IO流在java中从输入和输出角度分类: 1.输入流 2.输出流 IO流在java中从数据的角度来分类: 1.字符流:文本,我们能读懂的都可以认为是字符流,如:文章,java文件等 字符输入流的超类: ...
- CSP-S2019退役记
分两次写完思路不是很清晰. 作为一名强迫症患者我选择以后再更新一些细节…… upd 真·退役,D1T1为什么都是95分算法他们AC了我挂成了70分555555555555 普及-的题目A不掉我死了55 ...
- 执行 systemctl start firewalld 命令后出现Failed to start firewalld.service: Unit is masked
firewalld服务被锁定,不能添加对应端口 执行命令,即可实现取消服务的锁定 # systemctl unmask firewalld 下次需要锁定该服务时执行 # systemctl mask ...
- 理解CommonJS ,AMD ,CMD, 模块规范
参考 : https://blog.csdn.net/xcymorningsun/article/details/52709608 1.CommonJS 模块规范 (同步加载模块): var math ...
- android ellipsize的使用及实现跑马灯效果总结
参考资料: http://blog.csdn.net/huiwolf2008/article/details/7901084 http://www.cnblogs.com/Gaojiecai/arch ...
- cgroup & oom-killer 简介
cgroup内存限制 memory.failcnt memory.limit_in_bytes memory.usage_in_bytes memory.max_usage_in_bytes memo ...
- python Pool并行执行
# -*- coding: utf-8 -*- import time from multiprocessing import Pool def run(fn): #fn: 函数参数是数据列表的一个元 ...
- webogic基本使用
文章目录 启动 注入 部署应用: 访问 启动 /root/Oracle/Middleware/user_projects/domains/weblogic/bin/startWebLogic.sh 上 ...
- 10. Tasks and functions
Frm: IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language 10. Tasks and functio ...