超神线段树 山海经
问题 K: 山海经
时间限制: 1 Sec 内存限制: 128 MB
题目描述
“南山之首日鹊山。其首日招摇之山,临于西海之上,多桂,多金玉。有草焉,其状如韭而青华,其名日祝余,食之不饥……又东三百里,日堂庭之山,多棪木,多白猿,多水玉,多黄金。
又东三百八十里,日猨翼之山,其中多怪兽,水多怪鱼,多白玉,多蝮虫,多怪蛇,名怪木,不可以上。……”
《山海经》是以山为纲,以海为线记载古代的河流、植物、动物及矿产等情况,而且每一条记录路线都不会有重复的山出现。某天,你的地理老师想重游《山海经》中的路线,为了简化问题,老师已经把每座山用一个整数表示他对该山的喜恶程度,他想知道第a座山到第b座山的中间某段路(i,j)。能使他感到最满意,即(i,j)这条路上所有山的喜恶度之和是(c,d)(a≤c≤d≤b)最大值。于是老师便向你请教,你能帮助他吗?值得注意的是,在《山海经》中,第i座山只能到达第i+1座山。
输入
输入第1行是两个数,n,m,2≤n≤100000,1≤m≤100000,n表示一共有n座山,m表示老师想查询的数目。
第2行是n个整数,代表n座山的喜恶度,绝对值均小于10000。
以下m行每行有a,b两个数,1≤a≤j≤b≤m,表示第a座山到第b座山。
输出
样例输入
5 3 5 -6 3 -1 4 1 3 1 5 5 5
样例输出
1 1 5 3 5 6 5 5 4
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ll long long
#define N 100000
#define hmid a.hr+b.hl
using namespace std;
int n,m,a[N+5];
struct tree
{int l,r,hl,hm,hr,h,r1,l2,r2,l3;
} t[N*4+5];
ll read()
{ll sum=0,f=1;char x=getchar();while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}while(x>='0'&&x<='9'){sum=sum*10+x-'0';x=getchar();}return sum*f;
}
tree pushup(tree a,tree b)
{tree ans;ans.l=a.l;ans.r=b.r;ans.h=a.h+b.h;if(a.hl>=a.h+b.hl)ans.hl=a.hl,ans.r1=a.r1;elseans.hl=a.h+b.hl,ans.r1=b.r1;if(a.hr+b.h<b.hr)ans.hr=b.hr,ans.l3=b.l3;elseans.hr=a.hr+b.h,ans.l3=a.l3;if(b.hm>hmid&&b.hm>a.hm)ans.hm=b.hm,ans.l2=b.l2,ans.r2=b.r2;else{if(hmid>a.hm)ans.hm=hmid,ans.l2=a.l3,ans.r2=b.r1;else{if(a.hm>hmid)ans.hm=a.hm,ans.r2=a.r2,ans.l2=a.l2;else{if(a.l2<=a.l3)ans.hm=a.hm,ans.l2=a.l2,ans.r2=a.r2;elseans.hm=hmid,ans.l2=a.l3,ans.r2=b.r1;}}}return ans;
}
void build(int l,int r,int x)
{t[x].l=l;t[x].r=r;if(l==r){t[x].h=t[x].hl=t[x].hm=t[x].hr=a[l];t[x].l2=t[x].l3=l;t[x].r1=t[x].r2=r;return;}int mid=(l+r)/2;build(l,mid,x*2);build(mid+1,r,x*2+1);t[x]=pushup(t[x*2],t[x*2+1]);
}
tree Q(int l,int r,int x)
{if(t[x].l>=l&&t[x].r<=r){return t[x];}int mid=(t[x].l+t[x].r)/2;if(r<=mid)return Q(l,r,x*2);else{if(l>mid)return Q(l,r,x*2+1);elsereturn pushup(Q(l,r,x*2),Q(l,r,x*2+1));}
}
int yjn()
{
// freopen("hill.in","r",stdin);// freopen("hill.out","w",stdout);n=read();m=read();for(int i=1;i<=n;i++)a[i]=read();build(1,n,1);int x,y;while(m--){scanf("%d%d",&x,&y);tree ans=Q(x,y,1);if(ans.hr>ans.hl&&ans.hr>ans.hm)printf("%d %d %d\n",ans.l3,ans.r,ans.hr);elseif(ans.hl>ans.hm)printf("%d %d %d\n",ans.l,ans.r1,ans.hl);elseprintf("%d %d %d\n",ans.l2,ans.r2,ans.hm);}
}
int qty=yjn();
int main(){;}
转载于:https://www.cnblogs.com/QTY2001/p/7632738.html
超神线段树 山海经相关推荐
- Codeforces311D. Interval Cubing 神线段树
一个操作:把区间每个数都变为立方. 一个询问:区间的和. 看了题解简直sxbk,首先我们可以发现n对于线段树的题目来说是比较小的,再加上codeforces强大的评测机线段树的范围是不是有点小... ...
- bzoj3165 segment 超哥线段树
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3165 题意:动态增加线段,求出横坐标纵坐标最高的被覆盖点所在线段. 这个题要用到李超线段树(o ...
- 【BZOJ1568】【Tyvj3490】Blue Mary开公司 李超线段树
Time:2016.08.02 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 题意大致为 维护有斜率和截距的若干直线,并求直线x=T(T∈N)与当前已加入直线交点的ym ...
- c++自带的可持久化平衡树?rope大法好!(超详细解答 + 5道例题讲解,可直接替代可持久化的线段树、并查集、平衡树!)
整理的算法模板合集: ACM模板 目录 c++自带的可持久化平衡树?rope大法好! 1. 声明 2. 支持操作 char类型的rope int类型的rope 3. 具体的细节 4. "可持 ...
- Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题
4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 177 Solved: 128 [Submit][Stat ...
- 【线段树】【cogs775】山海经
775.山海经 ★★★ 输入文件:hill.in 输出文件:hill.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] "南山之首日鹊山.其首日招摇之山,临于西海之上 ...
- COGS 775. 山海经 【线段树】
775. 山海经 [问题描述] "南山之首日鹊山.其首日招摇之山,临于西海之上,多桂,多金玉.有草焉,其状如韭而青华,其名日祝余,食之不饥--又东三百里,日堂庭之山,多棪木,多白猿,多水玉, ...
- b+树时间复杂度_前端大神用的学习笔记:线段树和树状数组
全文篇幅较长,细心理解一定会有收获的♪(^∇^*). 1|0线段树 1|1一些概念 线段树是一种二叉搜索树,每一个结点都是一个区间(也可以叫作线段,可以有单点的叶子结点),有一张比较形象的图如 ...
- 【codevs2293】山海经 线段树
题目描述 Description [Shadow 1]第三题 "南山经之首曰鹊山.其首曰招摇之山,临于西海之上.多桂多金玉.有草焉,其状如韭而青华,其名曰祝馀,食之不饥-- 又东三百里曰堂庭 ...
最新文章
- 【原】display:inline-block下的IE元素
- iOS开发 iOS10兼容访问http
- 29 WM配置-策略-出库策略2-定义“紧急FIFO”策略(Stringent FIFO)
- mysql分頁查詢_mysql分頁查詢 | 學步園
- 将mysql中的数据库表导出和导入
- eclipse改变默认的编码格式(UTF-8)
- 苹果应用 Windows 申请 普通证书 和Push 证书 Hbuilder 个推(2)
- 软件项目管理知识点总结
- 服务器搭建nginx集群
- HTML5/CSS3动画应用
- 显示器色彩精度测试软件,色域和色彩精准度测试_液晶显示器_液晶显示器评测-中关村在线...
- c语言 将数组转化成二叉树
- 无线网卡芯片类型及与linux-wlan-ng的兼容性
- 十天教会你做“刀塔传奇”
- [MEM]综合能力考试-数学知识点
- 搜索进阶之迭代加深搜索
- 多媒体的一些基本概念
- 2021-12-07(JZ83 剪绳子(进阶版))
- 在python IDLE中打开python Shell,就可以直接用import导入当前模块了
- 2005-04-21
热门文章
- Java 变量声明和赋值
- java JVM虚拟机
- System.Data.SqlClient.SqlException:“对象名 'customer' 无效。
- XML 序列化 【译】
- CopyOnWriteArrayList源码分析
- 教你清楚了解JAVA动态代理
- Redis系列五:redis键管理和redis数据库管理
- 12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间
- OpenStack collectd的从零安装服务端
- 在Autodesk应用程序商店发布基于浏览器的Web应用程序