POJ 3264 Balanced Lineup (线段树)
Balanced Lineup
For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbee with some of the cows. To keep things simple, he will take a contiguous range of cows from the milking lineup to play the game. However, for all the cows to have fun they should not differ too much in height.
Farmer John has made a list of Q (1 ≤ Q ≤ 200,000) potential groups of cows and their heights (1 ≤ height ≤ 1,000,000). For each group, he wants your help to determine the difference in height between the shortest and the tallest cow in the group.
Input
Lines 2..
N+1: Line
i+1 contains a single integer that is the height of cow
i
Lines
N+2..
N+
Q+1: Two integers
A and
B (1 ≤
A ≤
B ≤
N), representing the range of cows from
A to
B inclusive.
Output
Q: Each line contains a single integer that is a response
to a reply and indicates the difference in height between the tallest
and shortest cow in the range.
Sample Input
- 6 3
- 1
- 7
- 3
- 4
- 2
- 5
- 1 5
- 4 6
- 2 2
Sample Output
- 6
- 3
- 0
题意:问你[l r]区间最大值-最小值多少
记得写过 今天给学弟写 自己无聊 写了一遍
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<cstdlib>
- #include<string.h>
- #include<set>
- #include<vector>
- #include<queue>
- #include<stack>
- #include<map>
- #include<cmath>
- typedef long long ll;
- typedef unsigned long long LL;
- using namespace std;
- const double PI=acos(-1.0);
- const double eps=0.0000000001;
- const int N=+;
- const int INF=1e9;
- int a[N];
- struct node{
- int l,r;
- int maxx,minn;
- int val;
- }tree[N*];
- void build(int left,int right,int pos){
- tree[pos].l=left;
- tree[pos].r=right;
- tree[pos].val=tree[pos].maxx=;
- tree[pos].minn=INF;
- int mid=(tree[pos].l+tree[pos].r)>>;
- if(tree[pos].l==tree[pos].r){
- return ;
- }
- build(left,mid,pos<<);
- build(mid+,right,pos<<|);
- }
- void update(int left,int right,int pos,int x,int y){
- int mid=(left+right)>>;
- if(tree[pos].l==x&&tree[pos].r==x){
- tree[pos].val=y;
- tree[pos].minn=y;
- tree[pos].maxx=y;
- return;
- }
- if(x>mid)update(mid+,right,pos<<|,x,y);
- else
- update(left,mid,pos<<,x,y);
- tree[pos].maxx=max(tree[pos<<].maxx,tree[pos<<|].maxx);
- tree[pos].minn=min(tree[pos<<].minn,tree[pos<<|].minn);
- return ;
- }
- int maxx;
- int minn;
- int query(int pos,int x,int y){
- if(x==tree[pos].l&&tree[pos].r==y){
- //cout<<4<<endl;
- //cout<<tree[pos].maxx<<" "<<tree[pos].minn<<endl;
- minn=min(minn,tree[pos].minn);
- maxx=max(maxx,tree[pos].maxx);
- return ;
- }
- int mid=(tree[pos].l+tree[pos].r)>>;
- if(x>tree[pos].r||y<tree[pos].l)return ;
- else if(x>mid)query(pos<<|,x,y);
- else if(y<=mid)query(pos<<,x,y);
- else{
- query(pos<<|,mid+,y);
- query(pos<<,x,mid);
- }
- return ;
- }
- int main(){
- int n,q;
- scanf("%d%d",&n,&q);
- build(,n,);
- for(int i=;i<=n;i++){
- scanf("%d",&a[i]);
- update(,n,,i,a[i]);
- }
- while(q--){
- maxx=;
- minn=INF;
- //cout<<minn<<" "<<maxx<<endl;
- int x,y;
- scanf("%d%d",&x,&y);
- query(,x,y);
- cout<<maxx-minn<<endl;
- }
- }
POJ 3264 Balanced Lineup (线段树)的更多相关文章
- [POJ] 3264 Balanced Lineup [线段树]
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 34306 Accepted: 16137 ...
- poj 3264 Balanced Lineup(线段树、RMQ)
题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...
- POJ 3264 Balanced Lineup 线段树RMQ
http://poj.org/problem?id=3264 题目大意: 给定N个数,还有Q个询问,求每个询问中给定的区间[a,b]中最大值和最小值之差. 思路: 依旧是线段树水题~ #include ...
- POJ 3264 Balanced Lineup 线段树 第三题
Balanced Lineup Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line ...
- POJ - 3264 Balanced Lineup 线段树解RMQ
这个题目是一个典型的RMQ问题,给定一个整数序列,1~N,然后进行Q次询问,每次给定两个整数A,B,(1<=A<=B<=N),求给定的范围内,最大和最小值之差. 解法一:这个是最初的 ...
- 【POJ】3264 Balanced Lineup ——线段树 区间最值
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 34140 Accepted: 16044 ...
- Poj 3264 Balanced Lineup RMQ模板
题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...
- POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53703 Accepted: 25237 ...
- POJ 3264 Balanced Lineup 【ST表 静态RMQ】
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
随机推荐
- 使用xml实现的增删改查功能
实体类: package vo; public class Contact { private String id; private String name; private String gende ...
- python读取单个文件操作
python读取单个文件,参考<笨方法学python>的第15节. 运行方式是采用:python python文件名 要读取的文件名 代码中 script, filename = argv ...
- 4.用Redis Desktop Manager连接Redis(Windows)
相比连接CentOS的Redis,在Windows中的操作简单得让人感动. 所以这里我们使用的服务器系统是Windows Server 2016 R2. 而Windows版本的Redis官方网站并没有 ...
- What is the difference between Gradle Build and Gradle Sync?
Gradle Build helps you to compile your Android app into an APK while Gradle Sync will sync up all yo ...
- 猜数字游戏的提示(Master-Mind Hints, UVa 340)
实现一个经典"猜数字"游戏. 给定答案序列和用户猜的序列,统计有多少数字位置正确 (A),有多少数字在两个序列都出现过但位置不对(B). 输入包含多组数据.每组输入第一行为序列长度 ...
- 三、Scrapy中选择器用法
官方示例源码<html> <head> <base href='http://example.com/' /> <title>Example web ...
- 学习Android
=========================================today start to learn Android================= 我们学习需要的软件: jd ...
- ssm 数据库连接池配置
1.工程引入druid-1.1.2.jar包2.修改spring-common.xml文件 <!-- 1. 数据源 : DruidDataSource--> <bean id=&qu ...
- vim学习1-入门指令
使用vim命令进入vim界面 vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名. 打开Xfce终端,输入以下命令 $ vim practice_1.txt 直接使用vim也可 ...
- 【codeforces 796C】Bank Hacking(用一些技巧来代替multiset)
[题目链接]:http://codeforces.com/contest/796/problem/C [题意] 给你n个节点,你一开始选择一个节点,然后打掉它,然后与被打掉过的节点相连的节点才能被 打 ...