G - Balanced Lineup
2024-09-27 16:49:10
思路:水题,线段树的基本操作即可。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 50010
using namespace std;
int n,q;
struct nond{
int l,r,min,max;
}tree[MAXN*];
void up(int now){
tree[now].max=max(tree[now*].max,tree[now*+].max);
tree[now].min=min(tree[now*].min,tree[now*+].min);
return ;
}
void build(int now,int l,int r){
tree[now].l=l;tree[now].r=r;
if(tree[now].l==tree[now].r){
scanf("%d",&tree[now].max);
tree[now].min=tree[now].max;
return ;
}
int mid=(tree[now].l+tree[now].r)/;
build(now*,l,mid);
build(now*+,mid+,r);
up(now);
}
int querymax(int now,int l,int r){
if(tree[now].l==l&&tree[now].r==r)
return tree[now].max;
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) return querymax(now*,l,r);
else if(l>mid) return querymax(now*+,l,r);
else return max(querymax(now*,l,mid),querymax(now*+,mid+,r));
}
int querymin(int now,int l,int r){
if(tree[now].l==l&&tree[now].r==r)
return tree[now].min;
int mid=(tree[now].l+tree[now].r)/;
if(r<=mid) return querymin(now*,l,r);
else if(l>mid) return querymin(now*+,l,r);
else return min(querymin(now*,l,mid),querymin(now*+,mid+,r));
}
int main(){
scanf("%d%d",&n,&q);
build(,,n);
for(int i=;i<=q;i++){
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",querymax(,x,y)-querymin(,x,y));
}
}
最新文章
- Python常用方法
- codeforces 724
- sql注入在线检测(sqlmapapi)
- Codeforces Round #263 (Div. 2) D. Appleman and Tree(树形DP)
- 关于arcgis发布wfs问题
- c#面向对象机制的进一步理解
- PLINQ 简介
- Codeforces Round #226 (Div. 2)A. Bear and Raspberry
- Wall(Graham算法)
- MySQL存储过程详解 mysql 存储过程(二)
- myeclipse自动生成注释
- ftp服务器可以连接但不能传输数据(proftpd)
- Linux vi/vim编辑器常用命令与用法总结
- Dubbo2.6.5+Nacos注册中心(代替Zookeeper)
- 编写带有下列声明的例程:第一个例程是个驱动程序,它调用第二个例程并显示String str中的字符的所有排列。例如,str是";abc";, 那么输出的串则是abc,acb,bac,bca,cab,cba,第二个例程使用递归。
- 苹果后门、微软垄断与Linux缺位
- TDD、BDD、DDD
- 微信小程序:WXSS 样式
- 【BioCode】根据seq与位点信息截取窗口
- java成神之——集合框架之队列,栈,集合并发