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] .根 ...
随机推荐
- 转载:gulp文件
这是我的文件目录结构图 下面是我gulpfile.js的配置 'use strict' var gulp=require('gulp'); var gutil=require('gulp-util' ...
- Kali 使用ssh,安装vmware tools 和字体重叠
Kali一直是我所爱,说说遇到的问题吧 第一个:字体重叠 gnome-tweak-tool --打开工具 第二个:ssh 修改sshd_config文件,命令为: vi /etc/ssh/sshd_c ...
- grep
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html
- Tomcat使用详解
Tomcat简介 官网:http://tomcat.apache.org/ Tomcat GitHub 地址:https://github.com/apache/tomcat Tomcat是Apach ...
- 页面无刷新Upload File
页面无刷新Upload File. 利用jquery.form.js的ajaxForm提交文件. 具体参考以下代码: 前台html <%@ Page Language="C#" ...
- Angular2 Http
1. 使用Http 绝大部分应用程序都会和后台服务打交道,Http是浏览器和服务器之间通讯的主要协议,通过Http调用来访问远程服务器上相应的 Web API. HttpModule 并不是 Angu ...
- SQL 统计两个表的数据,按同一日期分组
思路:把两个表的数据按日期整合到临时表在按日期分组,求和. 例子: SELECT t.dateTime AS '日期',SUM(t.money) AS '表1利息',SUM(t.interest) A ...
- Clang与libc++abi库安装
系统ubuntu64位 Clang4.0 参考: 1 https://github.com/yangyangwithgnu/use_vim_as_ide#0.1 其中 第7章 工具链集成 2. htt ...
- ASP.NET知识总结(9.使用Cookies实现购物车)
ListInfo.aspx向购物车的添加商品的方法 private void GouWu(string name, double price, string id) { //往购物车中添加商品 Htt ...
- 【修改 UITextField 中 placeholder 的顏色】
第一种方法: [textfeild setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"]; ...