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 ...
随机推荐
- 第2-4-5章 规则引擎Drools高级语法-业务规则管理系统-组件化-中台
目录 6. Drools高级语法 6.1 global全局变量 6.2 query查询 6.3 function函数 6.4 LHS加强 6.4.1 复合值限制in/not in 6.4.2 条件元素 ...
- js 获取相同name元素的属性值
如图有8-12月5个文本域,id为plan8-12,name同为plan. 现在要获取name同为plan的所有属性值: 方法一: var allplan =document.getElementsB ...
- NET 6 实现滑动验证码(三)、接口
题外话,有网友说,这玩意根本很容易破解,确实是这样.但验证码这东西,就跟锁子很类似,防君子不防小人.验证码的发明其实是社会文明的退步.因为它阻碍了真正的使用者,却无法阻挡别有用心的人.但又有什么办法呢 ...
- MybatisPlus多表连接查询一对多分页查询数据
一.序言 在日常一线开发过程中,多表连接查询不可或缺,基于MybatisPlus多表连接查询究竟该如何实现,本文将带你找到答案. 在多表连接查询中,既有查询单条记录的情况,又有列表查询,还有分页查询, ...
- OpenLooKeng
一.登录注册 网址为:https://tryme.openlookeng.io/,进入该网址后可以看到以下界面: 可以选择左边的GitHub或者右边的Gitee进行登录,如果没有账号需要注册一个账号进 ...
- 在OpenEuler22.09(也适用于CentOS7+)编译安装Python3.9,并于原Python共存-指南
指南使用操作系统:OpenEuler 22.09(网络安装,最小安装,使用默认源) 指南使用系统自带Python版本:3.10(高版本,这不是3.1喔) 1. 安装基本的编译环境 yum -y ins ...
- 嵌入式Linux Qt移植详细过程
嵌入式Linux下的Qt移植详细过程 开发说明 前段时间需要用开发板写一个下位机程序,是基于Linux系统,就想着用Qt来写,于是上网找教程看如何移植到开发板上.由于我不熟悉嵌入式Linux,加上网上 ...
- Docker容器入门到精通
Docker 容器 快速入门 第一章:Docker容器 第二章:Dockerfile指令与Docker-compose容器编排-搭建docker私有仓库 h1 { color: rgba(0, 60, ...
- 【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康
前提介绍 相信如果经历了我的上一篇Arthas的文章[[JVM实战系列]「监控调优体系」针对于Alibaba-Arthas的安装入门及基础使用开发实战指南]之后,相信你对Arthas的功能和使用应该有 ...
- ctfshow——萌新web3
题目如下: 源码分析: 通过id可以传入一个参数,对id的值进行了过滤,这里是正则匹配过滤,内容分析:or,-,\,*,<,>,!,x,hex,+.最外面的i是同时匹配过滤内容的大小写.在 ...