/*
线段树开到*4 *4 *4 *4 !
维护 4个值 区间最大值 区间最小值 从左往右跑最大收益 从右往左跑最大收益
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 200010
#define inf 0x7fffffff
using namespace std;
int n,m,num,a[maxn];
struct node
{
int lc,rc;
int l,r;
int smin,smax;
int ansl,ansr;
}t[maxn*];
int init()
{
int x=;char s;bool f=;s=getchar();
while(s<''||s>'')s=getchar();
while(s>=''&&s<='')
{
x=x*+s-'';
s=getchar();
}
return x;
}
void update(int k)
{
t[k].smin=min(t[t[k].lc].smin,t[t[k].rc].smin);
t[k].smax=max(t[t[k].lc].smax,t[t[k].rc].smax);
t[k].ansl=max(t[t[k].lc].ansl,t[t[k].rc].ansl);
t[k].ansl=max(t[k].ansl,t[t[k].rc].smax-t[t[k].lc].smin);
t[k].ansr=max(t[t[k].lc].ansr,t[t[k].rc].ansr);
t[k].ansr=max(t[k].ansr,t[t[k].lc].smax-t[t[k].rc].smin);
}
void Build(int ll,int rr)
{
int k=++num;
t[k].l=ll;t[k].r=rr;
if(ll==rr)
{
t[k].smin=t[k].smax=a[ll];
return;
}
t[k].lc=num+;
Build(ll,(ll+rr)/);
t[k].rc=num+;
Build((ll+rr)/+,rr);
update(k);
}
int findmin(int k,int ll,int rr)
{
if(ll<=t[k].l&&rr>=t[k].r)return t[k].smin;
int mid=(t[k].l+t[k].r)/;
if(rr<=mid)return findmin(t[k].lc,ll,rr);
else if(ll>mid)return findmin(t[k].rc,ll,rr);
else return min(findmin(t[k].lc,ll,mid),findmin(t[k].rc,mid+,rr));
}
int findmax(int k,int ll,int rr)
{
if(ll<=t[k].l&&rr>=t[k].r)return t[k].smax;
int mid=(t[k].l+t[k].r)/;
if(rr<=mid)return findmax(t[k].lc,ll,rr);
else if(ll>mid)return findmax(t[k].rc,ll,rr);
else return max(findmax(t[k].lc,ll,mid),findmax(t[k].rc,mid+,rr));
}
int findl(int k,int ll,int rr)
{
if(ll<=t[k].l&&rr>=t[k].r)return t[k].ansl;
int mid=(t[k].l+t[k].r)/;
if(rr<=mid)return findl(t[k].lc,ll,rr);
else if(ll>mid)return findl(t[k].rc,ll,rr);
else
{
int maxx=;
maxx=max(findl(t[k].lc,ll,mid),findl(t[k].rc,mid+,rr));
maxx=max(maxx,findmax(t[k].rc,mid+,rr)-findmin(t[k].lc,ll,mid));
return maxx;
}
}
int findr(int k,int ll,int rr)
{
if(ll<=t[k].l&&rr>=t[k].r)return t[k].ansr;
int mid=(t[k].l+t[k].r)/;
if(rr<=mid)return findr(t[k].lc,ll,rr);
else if(ll>mid)return findr(t[k].rc,ll,rr);
else
{
int maxx=;
maxx=max(findr(t[k].lc,ll,mid),findr(t[k].rc,mid+,rr));
maxx=max(maxx,findmax(t[k].lc,ll,mid)-findmin(t[k].rc,mid+,rr));
return maxx;
}
}
int main()
{
n=init();
for(int i=;i<=n;i++)
a[i]=init();
for(int i=;i<=maxn*;i++)
t[i].smin=inf;
Build(,n);
int x,y;
m=init();
for(int i=;i<=m;i++)
{
x=init();y=init();
if(x==y)
{
printf("0\n");
continue;
}
if(x<y)printf("%d\n",findl(,x,y));
else printf("%d\n",findr(,y,x));
}
return ;
}

codevs3304水果姐逛水果街的更多相关文章

  1. 水果姐逛水果街Ⅱ codevs 3305

    3305 水果姐逛水果街Ⅱ  时间限制: 2 s  空间限制: 256000 KB   题目描述 Description 水果姐第二天心情也很不错,又来逛水果街. 突然,cgh又出现了.cgh施展了魔 ...

  2. code vs 3305 水果姐逛水果街Ⅱ

    3305 水果姐逛水果街Ⅱ  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 水果姐第二天心情也很不错, ...

  3. codevs3304 水果姐逛水果街

    题目描述 Description 水果姐今天心情不错,来到了水果街. 水果街有n家水果店,呈直线结构,编号为1~n,每家店能买水果也能卖水果,并且同一家店卖与买的价格一样. 学过oi的水果姐迅速发现了 ...

  4. codevs3304 水果姐逛水果街Ⅰ

    题目描述 Description 水果姐今天心情不错,来到了水果街. 水果街有n家水果店,呈直线结构,编号为1~n,每家店能买水果也能卖水果,并且同一家店卖与买的价格一样. 学过oi的水果姐迅速发现了 ...

  5. codevs3305 水果姐逛水果街Ⅱ

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  6. Codevs 3305 水果姐逛水果街Ⅱ 倍增LCA

    题目:http://codevs.cn/problem/3305/  时间限制: 2 s   空间限制: 256000 KB   题目等级 : 钻石 Diamond 题解       题目描述 Des ...

  7. codevs 3305 水果姐逛水果街Ⅱ&&codevs3006

    题目描述 Description 水果姐第二天心情也很不错,又来逛水果街. 突然,cgh又出现了.cgh施展了魔法,水果街变成了树结构(店与店之间只有一条唯一的路径). 同样还是n家水果店,编号为1~ ...

  8. CodeVs——T 3305 水果姐逛水果街Ⅱ

    http://codevs.cn/problem/3305/  时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 De ...

  9. 水果姐逛水果街Ⅰ(codevs 3304)

    题目描述 Description 水果姐今天心情不错,来到了水果街. 水果街有n家水果店,呈直线结构,编号为1~n,每家店能买水果也能卖水果,并且同一家店卖与买的价格一样. 学过oi的水果姐迅速发现了 ...

  10. Codevs 3304 水果姐逛水果街Ⅰ 线段树

    题目: http://codevs.cn/problem/3304/   时间限制: 2 s   空间限制: 256000 KB   题目等级 : 钻石 Diamond 题解       题目描述 D ...

随机推荐

  1. Rewrite的QSA是什么意思?

    原版的英文: When the replacement URI contains a query string, the default behavior of RewriteRule is to d ...

  2. C# 程序性能提升篇-2、类型(字段类型、class和struct)的错误定义所影响性能浅析

    前景提要: 编写程序时,也许你不经意间,就不知不觉的定义了错误的类型,从而发生了额外的性能消耗,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候 ...

  3. Ajax 的同步与异步

    1.Ajax的工作原理如图: 2.同步 XMLHttpRequest 对象用于和服务器交换数据. XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参 ...

  4. Windows环境下安装PHPUnit

    Windows环境下安装PHPUnit,在此整理一下,以便大家参考. 本人测试安装环境:Windows7(win32) + Apache(2.2.13) + PHP(5.3.6) 1.    以管理员 ...

  5. Mongodb2.6升级到Mongodb3.0.2笔记

    PS:升级到3版本的Mongodb以后,drop集合是可以直接释放磁盘空间的 停止老版本Mongodb >use admin >db.shutdownServer(); 下载解压新版本Mo ...

  6. 8个经典的HTML5游戏在线试玩及源码学习

    原文地址:http://www.oschina.net/news/32364/html5-games 游戏,毫无疑问是拿来供大家娱乐玩耍的,这也无可厚非,但是,今天给大家分享的8个HTML5游戏,在好 ...

  7. Delphi下的RTTI函数大全

    http://ljz9425.blog.163.com/blog/static/369148572008111635253858/ Delphi下的RTTI(下) 2008-12-16 15:52:5 ...

  8. 【HDOJ】2289 Cup

    二分.另外,圆台体积为v = PI*(r*r+r*R+R*R)*H/3.注意精度. #include <cstdio> #include <cmath> #define exp ...

  9. bzoj2588

    一开始一看树上的操作,就无脑写了树链剖分+主席树 然后果断T了,因为树链剖分+主席树必然带来两个log的复杂度 而且树链剖分复杂度还比较大…… 后来发现其实没必要,在这道题,我们可以直接利用主席树维护 ...

  10. awk合并文件一例

    群里的朋友求助: $ cat file1a 1 2 3b 2 3 4c 3 4 5 $ cat file2d 你b 好c 吗 合并两个文件,需要实现: a 1 2 3b 2 3 4 好c 3 4 5 ...