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] .根 ...
随机推荐
- python2.7 报错(UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128))
报错: 原来用的python3.5版本后来改为2.7出现了这个错误里面的中文无法显示 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 ...
- org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [XXX] in DispatcherServlet with name 'springMVC'
在web.xml中添加 <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern ...
- django 强制登录最佳实践
参考: https://python-programming.courses/recipes/django-require-authentication-pages/ 即通过中间件来做AOP拦截.不用 ...
- powershell批量设置权限
批量设置权限 $acl=get-acl .\demo Get-ChildItem .\Documents -Recurse -Force|Set-Acl -AclObject $acl
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- [转载]python property
@property 简单解释. http://python.jobbole.com/80955/
- rocketmq查看命令
首先进入 RocketMQ 工程,进入/RocketMQ/bin 在该目录下有个 mqadmin 脚本 . 查看帮助: 在 mqadmin 下可以查看有哪些命令 a: 查看具体命令的使 ...
- linux无法挂载u盘
一般插入u盘都会自动挂载,但有时挂载不了,错误提示:can't find /dev/sdb in /etc/fstab:这时可能是U盘坏了,我们当然不希望是这样.也有可能是U盘使用的接口不对应导致系统 ...
- PE读写
// 仿PE文件.cpp : Defines the entry point for the console application.// #include "stdafx.h"# ...
- oracle 存储过程的用法
create or replace procedure myPro(inParams in number,outParams out number) is str varchar(200); beg ...