poj 3264
来源:互联网 发布:python 汉字编码转换 编辑:程序博客网 时间:2024/04/29 10:02
思路:线段树求区间最大最小值
#include <iostream>#include <stdio.h>#include <cstring>#define MAXN 300000using namespace std;typedef long long ll;ll a[MAXN];struct note{ int rr,ll; long long mm,nn;}q[MAXN*3];void build(int i,int l,int r){ q[i].rr=r; q[i].ll=l; if(l==r) { q[i].mm=q[i].nn=a[l]; return ; } int m=(l+r)/2; build(i*2,l,m); build(i*2+1,m+1,r); q[i].mm=max(q[i*2].mm,q[i*2+1].mm); q[i].nn=min(q[i*2].nn,q[i*2+1].nn);}ll query1(int i,int l,int r){ if(l<=q[i].ll&&r>=q[i].rr) { return q[i].mm; } int m=(q[i].ll+q[i].rr)/2; if(r<=m) return query1(i*2,l,r); else if(l>m) return query1(i*2+1,l,r); else return max(query1(i*2,l,r),query1(i*2+1,l,r));}ll query2(int i,int l,int r){ if(l<=q[i].ll&&r>=q[i].rr) { return q[i].nn; } int m=(q[i].ll+q[i].rr)/2; if(r<=m) return query2(i*2,l,r); else if(l>m) return query2(i*2+1,l,r); else return min(query2(i*2,l,r),query2(i*2+1,l,r));}int main(){ // freopen("in.txt","r",stdin); int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) scanf("%lld",&a[i]); build(1,1,n); int x,y; for(int i=0;i<m;i++) { scanf("%d%d",&x,&y); printf("%lld\n",query1(1,x,y)-query2(1,x,y)); } }}
0 0
- poj 3264
- POJ 3264
- POJ 3264
- poj 3264
- POJ 3264
- poj 3264
- poj 3264
- poj 3264
- poj 3264
- POJ 3264
- poj 3264
- poj-3264
- poj 3264
- POJ-3264
- poj-3264
- POJ 3264
- POJ 3264
- poj 3264
- MQTT
- Longest Palindromic Substring
- LINUX下编译安装PROTOBUF 【UBUNTU10.04+PROTOBUF-2.4.1.TAR.GZ】
- Java 深复制与浅复制
- java回调的理解
- poj 3264
- android studio编译项目,9 patch图片报错Crunching Cruncher
- Netbeans连接到SQL server2000 数据库
- 【ecmall】商户页不能安装支付宝插件的问题
- OLAP与OLTP介绍
- /查询C:\\Windows\\System32路径下所有结尾是.dll的文件
- 并发杂堆
- uboot串口与标准输入输出代码详解
- 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南