bzoj4491奇技淫巧线段树
20行的归并+10行的线段树(现在线段树真是越写越短了)+10行主程序(连主程序都缩过行) = =丧心病狂
struct里连开10个,用大括号直接初始化真是爽翻了
#include <cstdio>
#define mid ((l+r)>>1)
struct node
{
int ls,lj,rs,rj,s,ss,j,js,l,r;
} tr[],ans;
int a[];
int n,m,p,q;
inline int max(int p,int q){return(p>q)?p:q;}
node merge(node p,node q)
{
node ans;
ans.l=p.l;ans.r=q.r;
ans.ls=p.ls;ans.lj=p.lj;
ans.rs=q.rs;ans.rj=q.rj; if(p.s>q.s) ans.s=p.s,ans.ss=p.ss;
else ans.s=q.s,ans.ss=q.ss;
if(a[p.r]<=a[q.l])
if(ans.s<p.rs+q.ls)
ans.s=p.rs+q.ls,ans.ss=p.r-p.rs+;
if(ans.ss==p.l) ans.ls=ans.s;
if(ans.ss+ans.s-==q.r) ans.rs=ans.s; if(p.j>q.j) ans.j=p.j,ans.js=p.js;
else ans.j=q.j,ans.js=q.js;
if(a[p.r]>=a[q.l])
if(ans.j<p.rj+q.lj)
ans.j=p.rj+q.lj,ans.js=p.r-p.rj+;
if(ans.js==p.l) ans.lj=ans.j;
if(ans.js+ans.j-==q.r) ans.rj=ans.j;
return ans;
}
void build(int now,int l,int r)
{
if(l!=r)
build(now<<,l,mid),build(now<<|,mid+,r),tr[now]=merge(tr[now<<],tr[now<<|]);
else
tr[now]={,,,,,l,,l,l,l};
}
node que(int now,int l,int r,int p,int q)
{
if(l==p && r==q) return tr[now];
if(q<=mid) return que(now<<,l,mid,p,q);
else if(p>mid) return que(now<<|,mid+,r,p,q);
else return merge(que(now<<,l,mid,p,mid),que(now<<|,mid+,r,mid+,q));
}
int main()
{
for(scanf("%d",&n),p=;p<=n;p++)
scanf("%d",&a[p]);
build(,,n);
for(scanf("%d",&m);m;m--)
scanf("%d%d",&p,&q),ans=que(,,n,p,q),printf("%d\n",max(ans.s,ans.j));
return ;
}
事实上应该是1A的,但是输出的时候没回车(mdzz)错了一发
bzoj4491奇技淫巧线段树的更多相关文章
- bzoj3626: [LNOI2014]LCA奇技淫巧+树剖+线段树
题目求[a,b]到c的lca深度之和 显然是一个满足区间减法的操作 于是简化为 [1,b]到c的lca深度之和 (然并卵╮(╯▽╰)╭)然后就用奇技淫巧发现 a和b的lca深度=先把根节点到a的路 ...
- 2019.03.09 bzoj4491: 我也不知道题目名字是什么(线段树)
传送门 题意:给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串. 思路: 注意要求的是子串而不是子序列!!! 然后直接用线段树维护最大子段和的方式合并一 ...
- 【bzoj4491】我也不知道题目名字是什么 离线扫描线+线段树
题目描述 给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串 输入 第一行n,表示A数组有多少元素接下来一行为n个整数A[i]接下来一个整数Q,表示询问数 ...
- 【BZOJ4491】我也不知道题目名字是什么 [线段树]
我也不知道题目名字是什么 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 给定一个序列A[i ...
- HDU1556---树状数组 | 线段树 |*
输入n,紧接n行,每行a,b n个气球,a,b表示从第a到第b个气球涂一次色,输出每个球最终的涂几次色 暴力超时,优化数据结构 1.树状数组 #include<iostream> #inc ...
- LUOGU P4088 [USACO18FEB]Slingshot(线段树)
传送门 解题思路 推了推式子发现是个二维数点,想了想似乎排序加线段树难写,就写了个树套树,结果写完看见空间才\(128M\)..各种奇技淫巧卡空间还是\(MLE\)到天上.后来只好乖乖的写排序+线段树 ...
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
随机推荐
- 大端字节序&小端字节序(网络字节序&主机字节序)
大端字节序:整数的高位字节存储在内存的低地址处,低字节存储在内存的高地址处. 小端字节序:整数的高位字节存储在内存的高地址处,低字节存储在内存的低地址处. 一般pc大多采用小端字节序,也称为主机字节序 ...
- 关于开放式CNC系统实时软件控制系统的一些简单分析
随笔: 黄杰U201310771 首先,我们一起了解或复习两个概念:开放式CNC和开放式CNC体系结构.按照工EEE规定:一个开放式的系统必须具备不同应用程序能很好地运行于不同供应商提供的不同平台之上 ...
- 适配各种Windows分辨率,为DPI添加感知,当在高DPI时,禁用WINFORM缩放等。
因为现在高分屏越来越多,很多windows设备必须设置高DPI,这样很容易导致WINFORM整体错位,因此我们需要自己适配.禁止缩放 在程序配置清单 mainfest中添加如下. <assemb ...
- iOS 对象和json互相转换
// 将字典或者数组转化为JSON串 - (NSData *)toJSONData:(id)theData { NSError *error = nil; NSData *jsonData = [NS ...
- java servlet
回顾 1三要素是什么? 入口(login.html) 处理(LoginServlet.java) 出口 (success.jsp) 2如何访问servlet http://IP:port/p ...
- DOM对象—选中执行效果
---恢复内容开始--- 例如我们注册时,一些法律条例,我们是否同意决定着能否注册.在选择同意或不同意时出现的效果. 先在body里做一个按钮和选项框. <input type="ch ...
- Spring——集成JPA
配置文件如下:<applicationContext.xml> <?xml version="1.0" encoding="UTF-8"?&g ...
- python学习笔记(4)--函数
1.函数 函数是指将一组语句的集合通过一个名字封装起来.要想执行这个函数,只需调用其函数名即可. 函数的特性: 1.减少重复代码 2.使程序变的课扩展 3.使程序变得易维护 语法定义: def pri ...
- C#远程时间同步助手软件设计
C#远程时间同步助手软件设计 本程序才C#语言开发,实现远程时间同步功能,可以将本地时间每隔一段时间与时间服务器时间进行同步!不足之处还望见谅! 软件开发环境:Visual Studio 2010 软 ...
- 修改MS SQL忽略大小写 分类: SQL Server 数据库 2015-06-19 09:18 34人阅读 评论(0) 收藏
第一步:数据库->属性->选项->限制访问:SINGLE_USER 第二步:ALTER DATABASE [数据库名称] collate Chinese_PRC_CI_AI 第三步: ...