博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1699 [Usaco2007 Jan]Balanced Lineup排队 线段树
阅读量:6680 次
发布时间:2019-06-25

本文共 1409 字,大约阅读时间需要 4 分钟。

题意:

方法:线段树

解析:

题意即题解。

多次询问区间最大值与最小值的差。显然直接上线段树或者rmq维护区间最值就可以。

代码:

#include 
#include
#include
#include
#define N 50010#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define pa pair
using namespace std;int n,q;int ma[N<<2],mi[N<<2],dis[N<<2];void init(){ memset(ma,-1,sizeof(ma)); memset(mi,0x3f,sizeof(mi));}void pushup(int rt){ ma[rt]=max(ma[rt<<1],ma[rt<<1|1]); mi[rt]=min(mi[rt<<1],mi[rt<<1|1]);}void build(int l,int r,int rt){ if(l==r) { int x; scanf("%d",&x); ma[rt]=mi[rt]=x; return; } int mid=(l+r)>>1; build(lson),build(rson); pushup(rt);}pa query(int L,int R,int l,int r,int rt){ pa ret; ret.first=-1,ret.second=0x3f3f3f3f; if(L<=l&&r<=R) { pa p; p.first=ma[rt],p.second=mi[rt]; return p; } int mid=(l+r)>>1; if(L<=mid) { pa tmp=query(L,R,lson); ret.first=max(ret.first,tmp.first),ret.second=min(ret.second,tmp.second); } if(R>mid) { pa tmp=query(L,R,rson); ret.first=max(ret.first,tmp.first),ret.second=min(ret.second,tmp.second); } return ret;}int main(){ init(); scanf("%d%d",&n,&q); build(1,n,1); for(int i=1;i<=q;i++) { int x,y; scanf("%d%d",&x,&y); pa tmp=query(x,y,1,n,1); printf("%d\n",tmp.first-tmp.second); }}

转载地址:http://bxnao.baihongyu.com/

你可能感兴趣的文章
Confluence WIKI 安装、破解及添加汉化包(Windows)
查看>>
一起入门Citrix_XenDesktop7系列 二-- 跟着图片通过XenDesktop7交付(发布)应用与共享桌面...
查看>>
MyBatis学习手记(一)MaBatis入门
查看>>
SCTF-2014 writeup(部分)
查看>>
Elasticsearch 连接查询
查看>>
Retrofit入门
查看>>
设置Exchange 通讯组接收外部组织邮件
查看>>
观点:正在消逝的运维江湖
查看>>
istio 监控,遥测 (理论)
查看>>
Oracle insert 多条记录
查看>>
Python学习-baseNo.2
查看>>
spring data mongo 复合索引
查看>>
修改Windows Server 2008远程桌面连接端口
查看>>
Android获取指定目录下的文件代码
查看>>
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
查看>>
程序猿,你的坐姿正确吗?
查看>>
新疆之春(二)魂牵梦绕赛里木湖
查看>>
解析el表达式出错
查看>>
vmware实现nat上网
查看>>
Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看
查看>>