最大字段和--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] 标记字段
标记字段 代码中有时候有这种需求:需要一个公共访问的标记字段,以下称为标记字段. 下面是案例: 一个订单详情页面,如果页面在显示中,程序中其它地方需要访问这个"正在查看中"的订单信 ...
随机推荐
- 启动Process实现多任务
from multiprocessing import Process import time '''multiprocessing模块1.跨平台的多进程模块2.提供了一个Process类的实例代表一 ...
- Dubbox服务的提供方开发
(1)创建Maven工程(WAR)dubboxdemo-service ,在pom.xml中引入依赖 <project xmlns="http://maven.apache.org/ ...
- Aajx调用千千音乐数据接口
前端展示截图https://images.cnblogs.com/cnblogs_com/LiuFqiang/1429011/o_D09Q55)EL1VFEIJ(GKI%7D%7DY5.png < ...
- Nginx配置PHP环境支持
打开Nginx配置文件 输入 vim etc/nginx/nginx.conf 找到配置扩展文件: 打开配置文件配置如下环境: server { listen 80; server_nam ...
- PHP ftp_mkdir() 函数
定义和用法 ftp_mkdir() 函数在 FTP 服务器上创建一个新目录. 如果成功,该函数返回新目录的名称和路径.如果失败,则返回 FALSE. 语法 ftp_mkdir(ftp_connecti ...
- JCF——工具类
- Shell基础(六):使用awk提取文本、awk处理条件、awk综合脚本应用、awk流程控制、awk扩展应用
一.使用awk提取文本 目标: 本案例要求使用awk工具完成下列过滤任务: 1> 练习awk工具的基本用法 2> 提取本机的IP地址.根分区使用率 3> 格式化输出/et ...
- Python100天打卡-Day10
实现动画效果要实现动画效果,本身的原理也非常简单,就是将不连续的图片连续的播放,只要每秒钟达到了一定的帧数,那么就可以做出比较流畅的动画效果.import pygame def main(): # 初 ...
- web开发调用百度地图API + AK申请
web开发调用百度地图API + AK申请 要使用百度地图的API我们首先需要在我们的html页面引入js----`` 如何获取百度地图ak: 1.登陆百度地图开发者平台 2.注册百度开发者账号并登陆 ...
- 带头结点的循环单链表----------C语言
/***************************************************** Author:Simon_Kly Version:0.1 Date: 20170520 D ...