code:

#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define N 50003
#define lson now<<1
#define rson now<<1|1
#define inf 100000000
using namespace std;
void setIO(string s) {
string in=s+".in";
string out=s+".out";
freopen(in.c_str(),"r",stdin);
// freopen(out.c_str(),"w",stdout);
}
int n;
int sm[N];
int bg[N];
int pos[N];
int val[N];
int mx[N<<2];
int mn[N<<2];
int answer[N];
struct node {
int x;
int id;
node(int x=0,int id=0):x(x),id(id){}
}a[N<<1];
struct data {
int l,r,id;
data(int l=0,int r=0,int id=0):l(l),r(r),id(id){}
}e[N];
bool cmp(node a,node b) {
return a.x==b.x?a.id<b.id:a.x<b.x;
}
bool cmp_data(data a,data b) {
return a.r<b.r;
}
void build(int l,int r,int now) {
if(l==r) {
mn[now]=inf;
mx[now]=-inf;
return;
}
int mid=(l+r)>>1;
build(l,mid,lson);
build(mid+1,r,rson);
}
void fix_mn(int l,int r,int now,int p,int v) {
if(l==r) {
mn[now]=v;
return;
}
int mid=(l+r)>>1;
if(p<=mid) {
fix_mn(l,mid,lson,p,v);
}
else {
fix_mn(mid+1,r,rson,p,v);
}
mn[now]=min(mn[lson],mn[rson]);
}
void fix_mx(int l,int r,int now,int p,int v) {
if(l==r) {
mx[now]=v;
return;
}
int mid=(l+r)>>1;
if(p<=mid) {
fix_mx(l,mid,lson,p,v);
}
else {
fix_mx(mid+1,r,rson,p,v);
}
mx[now]=max(mx[lson],mx[rson]);
}
int que_mn(int l,int r,int now,int L,int R) {
if(l>=L&&r<=R) {
return mn[now];
}
int mid=(l+r)>>1,re=inf;
if(L<=mid) {
re=min(re,que_mn(l,mid,lson,L,R));
}
if(R>mid) {
re=min(re,que_mn(mid+1,r,rson,L,R));
}
return re;
}
int que_mx(int l,int r,int now,int L,int R) {
if(l>=L&&r<=R) {
return mx[now];
}
int mid=(l+r)>>1,re=-inf;
if(L<=mid) {
re=max(re,que_mx(l,mid,lson,L,R));
}
if(R>mid) {
re=max(re,que_mx(mid+1,r,rson,L,R));
}
return re;
}
int main() {
// setIO("input");
int i,j,cnt=0;
scanf("%d",&n);
for(i=1;i<=n;++i) {
scanf("%d",&val[i]);
}
pos[n]=sm[n]=bg[n]=n;
for(i=n-1;i>=1;--i) {
sm[i]=(val[i+1]<=val[i]?sm[i+1]:i);
bg[i]=(val[i+1]>=val[i]?bg[i+1]:i);
pos[i]=max(sm[i],bg[i]);
a[++cnt]=node(i,0);
a[++cnt]=node(pos[i],i);
}
sort(a+1,a+1+cnt,cmp);
int q;
scanf("%d",&q);
for(i=1;i<=q;++i) {
scanf("%d%d",&e[i].l,&e[i].r);
e[i].id=i;
}
sort(e+1,e+1+q,cmp_data);
build(1,n,1);
for(i=j=1;i<=q;++i) {
while(j<=cnt&&a[j].x<=e[i].r) {
if(a[j].id) {
fix_mn(1,n,1,a[j].id,inf);
fix_mx(1,n,1,a[j].id,a[j].x-a[j].id+1);
}
else {
fix_mn(1,n,1,a[j].x,a[j].x);
}
++j;
}
answer[e[i].id]=max(e[i].r-que_mn(1,n,1,e[i].l,e[i].r)+1, que_mx(1,n,1,e[i].l,e[i].r));
}
for(i=1;i<=q;++i) {
printf("%d\n",answer[i]);
}
return 0;
}

  

BZOJ 4491: 我也不知道题目名字是什么 线段树+离线的更多相关文章

  1. BZOJ 4491: 我也不知道题目名字是什么

    4491: 我也不知道题目名字是什么 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 278  Solved: 154[Submit][Status][ ...

  2. BZOJ 4491: 我也不知道题目名字是什么 RMQ

    4491: 我也不知道题目名字是什么 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 317  Solved: 174[Submit][Status][ ...

  3. 【BZOJ4491】我也不知道题目名字是什么 [线段树]

    我也不知道题目名字是什么 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 给定一个序列A[i ...

  4. 【BZOJ4991】我也不知道题目名字是什么(线段树)

    [BZOJ4991]我也不知道题目名字是什么(线段树) 题面 BZOJ 题解 对于线段树维护的区间维护以下东西: 区间左(右)端开始(结束)的最长(短)子串的长度 左端右端的值,以及当前区间内的答案 ...

  5. bzoj5417/luoguP4770 [NOI2018]你的名字(后缀自动机+线段树合并)

    bzoj5417/luoguP4770 [NOI2018]你的名字(后缀自动机+线段树合并) bzoj Luogu 给出一个字符串 $ S $ 及 $ q $ 次询问,每次询问一个字符串 $ T $ ...

  6. 【bzoj4491】我也不知道题目名字是什么 离线扫描线+线段树

    题目描述 给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串 输入 第一行n,表示A数组有多少元素接下来一行为n个整数A[i]接下来一个整数Q,表示询问数 ...

  7. BZOJ.5417.[NOI2018]你的名字(后缀自动机 线段树合并)

    LOJ 洛谷 BZOJ 考虑\(l=1,r=|S|\)的情况: 对\(S\)串建SAM,\(T\)在上面匹配,可以得到每个位置\(i\)的后缀的最长匹配长度\(mx[i]\). 因为要去重,对\(T\ ...

  8. [NOI2018]你的名字(后缀自动机+线段树)

    题目描述 小A 被选为了ION2018 的出题人,他精心准备了一道质量十分高的题目,且已经把除了题目命名以外的工作都做好了. 由于ION 已经举办了很多届,所以在题目命名上也是有规定的,ION 命题手 ...

  9. BZOJ5417[Noi2018]你的名字——后缀自动机+线段树合并

    题目链接: [Noi2018]你的名字 题目大意:给出一个字符串$S$及$q$次询问,每次询问一个字符串$T$有多少本质不同的子串不是$S[l,r]$的子串($S[l,r]$表示$S$串的第$l$个字 ...

随机推荐

  1. Windows7运行python3,提示缺少api-ms-win-crt-runtime-l1-1.0.dll

    一.实验环境 1.Windows7x64_SP1 二.操作步骤 2.1 python官网下载python3.6后,安装.运行,提示如下错误: 2.2 解决方式 去微软官网下载安装:KB2999226补 ...

  2. ImportError: cannot import name 'render_to_response' 解决方法

    前几天 Django 官方推出了 3.0 框架,项目在 K8S 内部署启动的时候,报了这个错:ImportError: cannot import name 'render_to_response' ...

  3. 原创的离线版 Redis 教程,给力!

    嗯,你没看错,松哥又给大家送干货来了.这次是可以离线阅读的 PDF 版教程哦. 之前一直有小伙伴问我有没有 Redis 的电子书,老实说,有是有,但是公开给大家分享,其实有一点点风险,毕竟这都是有版权 ...

  4. Kubernetes configMap(配置文件存储)

    Kubernetes configMap(配置文件存储) 官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure ...

  5. MySQL优化常见Extra分析——慢查询优化

    数据准备: create table user ( id int primary key, name ), sex ), index(name) )engine=innodb; 数据说明:用户表:id ...

  6. Powershell ExecutionPolicy 执行策略

    简单说明 powershell对于脚本的执行有着严格的安全限制 Get-ExecutionPolicy -List #查看当前的执行策略 Set-ExecutionPolicy -Scope Curr ...

  7. Winform 通过 WebBrowser 与 JS 交互

    Winform 通过 WebBrowser 与 JS 交互 魏刘宏 2019.08.17 之前在使用 Cef (可在 Winform 或 WPF 程序中嵌入 Chrome 内核的网页浏览器的组件)时, ...

  8. webapi 集成swagger

    参考资料:Stack Overflow 我自己写的demo:SwaggerDemoApi 在已有的webapi项目或者创建webapi项目中,打开nuget管理器 搜索:swagger 安装截图中的插 ...

  9. C# 学习笔记 多态(一)虚方法

    在面对对象编程中,类的三大特性分别为封装,继承,多态.其中多态的具体实现,依赖于三个方法,也就是虚方法,抽象类和接口. 多态的具体作用是什么呢?或者说多态的存在有什么意义呢?多态的存在有效的降低了程序 ...

  10. WPF 基础总结(学习建议)

    举个简单得例子, 类似造房子, 当然实际上可能非常细, 对应的如下所示: 在此之前, 需要了解的是. WPF项目是怎么启动的 Xaml的结构是怎么样组成, 命名控件定义引用的方法. 知道了如何在Xam ...