JZOJ 1073. 【GDOI2005】山海经
\(\text{Solution}\)
非常经典的求区间最大字段和
不难想到线段树,考虑处理区间答案的合并
维护前缀后缀最大和与区间答案,合并考虑跨中点贡献即可
代码打得非常恶心。。。
\(\text{Code}\)
#include <cstdio>
#define RE register
#define IN inline
#define ls (p << 1)
#define rs (ls | 1)
using namespace std;
const int N = 1e5 + 5, INF = 0x3f3f3f3f;
int n, m, a[N], s[N];
struct node{int pl, pr, sl, sr, l, r;}seg[N * 4];
IN int Get(int l, int r){if (!l || !r) return -INF; return s[r] - s[l - 1];}
IN node operator + (const node &a, const node &b)
{
node c = node{0, 0, 0, 0, 0, 0};
c.pl = a.pl, c.pr = a.pr; if (Get(a.pl, b.pr) > Get(c.pl, c.pr)) c.pr = b.pr;
c.sl = b.sl, c.sr = b.sr; if ((Get(a.sl, b.sr) > Get(c.sl, c.sr) || (Get(a.sl, b.sr) == Get(c.sl, c.sr) && a.sl < c.sl))) c.sl = a.sl;
if (Get(a.l, a.r) >= Get(b.l, b.r)) c.l = a.l, c.r = a.r; else c.l = b.l, c.r = b.r;
if (Get(c.pl, c.pr) > Get(c.l, c.r) || (Get(c.pl, c.pr) == Get(c.l, c.r) && (c.pl < c.l || (c.pl == c.l && c.pr < c.r)))) c.l = c.pl, c.r = c.pr;
if (Get(c.sl, c.sr) > Get(c.l, c.r) || (Get(c.sl, c.sr) == Get(c.l, c.r) && (c.sl < c.l || (c.sl == c.l && c.sr < c.r)))) c.l = c.sl, c.r = c.sr;
if (Get(a.sl, b.pr) > Get(c.l, c.r) || (Get(a.sl, b.pr) == Get(c.l, c.r) && (a.sl < c.l || (a.sl == c.l && b.pr < c.r)))) c.l = a.sl, c.r = b.pr;
return c;
}
void build(int p, int l, int r)
{
if (l == r) return seg[p] = node{l, l, l, l, l, l}, void();
int mid = l + r >> 1; build(ls, l, mid), build(rs, mid + 1, r), seg[p] = seg[ls] + seg[rs];
}
node Query(int p, int l, int r, int x, int y)
{
if (x <= l && r <= y) return seg[p]; int mid = l + r >> 1; node ret = node{0, 0, 0, 0, 0, 0};
if (x <= mid) ret = Query(ls, l, mid, x, y); if (y > mid) ret = ret + Query(rs, mid + 1, r, x, y);
return ret;
}
int main()
{
scanf("%d%d", &n, &m); for(RE int i = 1; i <= n; i++) scanf("%d", &a[i]), s[i] = s[i - 1] + a[i]; build(1, 1, n); node ret;
for(int l, r; m; --m) scanf("%d%d", &l, &r), ret = Query(1, 1, n, l, r), printf("%d %d %d\n", ret.l, ret.r, Get(ret.l, ret.r));
}
JZOJ 1073. 【GDOI2005】山海经的更多相关文章
- ural 1073. Square Country
1073. Square Country Time limit: 1.0 secondMemory limit: 64 MB There live square people in a square ...
- 01背包 URAL 1073 Square Country
题目传送门 /* 题意:问n最少能是几个数的平方和 01背包:j*j的土地买不买的问题 详细解释:http://www.cnblogs.com/vongang/archive/2011/10/07/2 ...
- Ural 1073 Square Country (DP)
题目地址:Ural 1073 DP水题.也能够说是背包. #include <iostream> #include <cstdio> #include <string&g ...
- ural 1073.Square Country(动态规划)
1073. Square Country Time limit: 1.0 secondMemory limit: 64 MB There live square people in a square ...
- (jzoj snow的追寻)线段树维护树的直径
jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...
- [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)
Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...
- [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)
Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...
- [jzoj]5478.【NOIP2017提高组正式赛】列队
Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校 ...
- [jzoj]1115.【HNOI2008】GT考试
Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...
- [jzoj]2538.【NOIP2009TG】Hankson 的趣味题
Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...
随机推荐
- TransmittableThreadLocal和@Async优雅的记录操作日志
此文主要讲解: 如何实现操作记录 如何将TransmittableThreadLocal和@Async搭配使用 TransmittableThreadLocal阿里的一个开源组件,为了在使用线程池等会 ...
- whistle证书过期或不信任
1. 安卓设备 , whistle抓包https安装证书后无法访问网络,报证书过期或不信任 2. 查看证书日期是到2030年,没有过期 3. 删除证书 重新安装时候证书选择 "VPN或应用& ...
- 【ASP.NET Core】MVC控制器的各种自定义:IActionHttpMethodProvider 接口
IActionHttpMethodProvider 接口的结构很简单,实现该接口只要实现一个属性即可--HttpMethods.该属性是一个字符串序列. 这啥意思呢?这个字符串序列代表的就是受支持的 ...
- ORM执行sql语句 双下划线 外键字段创建 ORM跨表查询
目录 模型层之ORM执行SQL语句 方式1一 方式二 方式三 神奇的双下划线查询 ORM外键字段的创建 1.创建基础表 2.确定外键关系 3.表的查看 数据的录入 外键字段相关操作 针对一对多 ''' ...
- PPT排版技巧
- day09-功能实现08
家居网购项目实现08 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 19.功能18-添加家居到购物车 19.1需求分析/图解 ...
- [编程基础] Python对象的浅拷贝与深拷贝笔记
Python中的赋值语句不创建对象的副本,它们只将名称绑定到对象.对于不可变的对象,这通常没有什么区别.但是对于处理可变对象或可变对象的集合,您可能需要寻找一种方法来创建这些对象的"真实副本 ...
- Ventoy制作启动盘和使用VMware测试启动盘(论文版)
- 1 Ventoy 1.1 Ventoy是什么 Ventoy是可用于制作启动U盘的开源工具,在占用少量引导分区容量后,其他空间依旧可以正常当一般的U盘读写文件.它的最大特点是只要将iso.win. ...
- Web初级——模块和Bom
模块导入 导出声明 定义时声明 在定义声明函数.类时不用加分号 // 导出数组 export let months = ['Jan', 'Feb', 'Mar','Apr', 'Aug', 'Sep' ...
- [数据结构]深度优先搜索算法(Depth-First-Search,DFS)
深度优先搜索算法的概念 与广度优先搜索算法不同,深度优先搜索算法类似与树的先序遍历.这种搜索算法所遵循的搜索策略是尽可能"深"地搜索一个图.它的基本思想如下:首先访问图中某一个起始 ...