POJ 3264 Balanced Lineup
来源:互联网 发布:足球滚球软件 编辑:程序博客网 时间:2024/06/03 19:32
题意:给n个数字,有q个查询,每个查询给出两个数l、r,求区间[l,r]内最大值与最小值的差
解题思路:线段树.由于数据量很大,直接模拟一定会超时,所以要用线段树维护每个区间的最大值和最小值,直接套模板
代码:
#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cstdio>#include <cmath>using namespace std;#define INF 0x3f3f3f3fconst int maxn=50000+5;int arr[maxn];struct SegTreeNode{ int valx,vald;}segTree[maxn*4];void build(int root,int istart,int iend){ if(istart==iend) { segTree[root].valx=arr[istart]; segTree[root].vald=arr[istart]; } else { int mid=(istart+iend)/2; build(root*2,istart,mid); build(root*2+1,mid+1,iend); segTree[root].valx=min(segTree[root*2].valx,segTree[root*2+1].valx); segTree[root].vald=max(segTree[root*2].vald,segTree[root*2+1].vald); }}int query1(int root,int nstart,int nend,int qstart,int qend){ if(qstart>nend||qend<nstart)return INF; if(qstart<=nstart&&qend>=nend)return segTree[root].valx; int mid=(nstart+nend)/2; return min(query1(root*2,nstart,mid,qstart,qend),query1(root*2+1,mid+1,nend,qstart,qend));}int query2(int root,int nstart,int nend,int qstart,int qend){ if(qstart>nend||qend<nstart)return -INF; if(qstart<=nstart&&qend>=nend)return segTree[root].vald; int mid=(nstart+nend)/2; return max(query2(root*2,nstart,mid,qstart,qend),query2(root*2+1,mid+1,nend,qstart,qend));}void updateOne(int root,int nstart,int nend,int index,int addval){ if(nstart==nend) { if(index==nstart) { segTree[root].valx+=addval; segTree[root].vald+=addval; return ; } } int mid=(nstart+nend)/2; if(index<=mid)updateOne(root*2,nstart,mid,index,addval); else updateOne(root*2+1,mid+1,nend,index,addval); segTree[root].valx=min(segTree[root*2].valx,segTree[root*2+1].valx); segTree[root].vald=max(segTree[root*2].vald,segTree[root*2+1].vald);}int n,q;int main(){ while(scanf("%d%d",&n,&q)==2) { for(int i=1;i<=n;i++) { scanf("%d",&arr[i]); } build(1,1,n); int l,r; for(int i=0;i<q;i++) { scanf("%d%d",&l,&r); int mmin=query1(1,1,n,l,r); int mmax=query2(1,1,n,l,r); int dif=mmax-mmin; printf("%d\n",dif); } } return 0;}/*6 31734251 54 62 2*/
阅读全文
0 0
- POJ 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- Poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- POJ-3264-Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- POJ 3264-Balanced Lineup
- poj 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- POJ-3264-Balanced Lineup
- POJ 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- 这是一个开始
- MYSQL查询优化
- JavaSwing_4.9: JTree(树)
- POJ 3900 The Robbery(DFS+剪枝)
- 对范数求偏导数
- POJ 3264 Balanced Lineup
- 三、5(3)
- wr720n v4 折腾笔记(一):安装Openwrt
- JavaSwing_4.10: JInternalFrame(内部窗口)
- 判断两个链表是否相交
- 希尔排序及代码实现
- 使用虚拟机实现lvs nat模式负载均衡
- 求旋转数组中的最小值
- Overlapping Rectangles(线段树,矩形面积并)