Balanced Lineup
Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 53629   Accepted: 25223
Case Time Limit: 2000MS

Description

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

Line 1: Two space-separated integers, N and Q.
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 ≤ ABN), representing the range of cows from A to B inclusive.

Output

Lines 1..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

典型RMQ问题,目前只会写数组类线段树,但这道题需要存最大最小值,结构体类型线段树不是很熟,所以果断写了RMQ

时间:3694ms
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
#define N 50006
int maxx[N][25],minx[N][25];
int n,m,x,y;
void get_RMQ()
{for(int i=1;i<=n;i++){scanf("%d",&x);maxx[i][0]=x;minx[i][0]=x;}for(int j=1;(1<<j)<=n;j++){for(int i=1;i+(1<<j)-1<=n;i++){maxx[i][j]=max(maxx[i][j-1],maxx[i+(1<<(j-1))][j-1]);//存最大值minx[i][j]=min(minx[i][j-1],minx[i+(1<<(j-1))][j-1]);//存最小值
        }}
}
int get_K(int l,int r)
{if(l>r) return 0;int k=0;while(1<<(1+k)<=r-l+1) k++;return k;//查找区间即j
}
int RMQUPPER(int l,int r,int k)
{return max(maxx[l][k],maxx[r-(1<<k)+1][k]);
}
int RMQLOWER(int l,int r,int k)
{return min(minx[l][k],minx[r-(1<<k)+1][k]);
}
int main()
{scanf("%d%d",&n,&m);get_RMQ();while(m--){int k;scanf("%d%d",&x,&y);k=get_K(x,y);printf("%d\n",RMQUPPER(x,y,k)-RMQLOWER(x,y,k));}
}

再来一个线段树代码,注意必须两次查询,一次查最大,一次查最小,我想把最大最小值相减差值保存在结构体中,只查询一次,但这样会wrong answer

见代码注释部分

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
#define N 50009
#define mod 0x3f3f3f3f
int n,m,x,y;
struct Node
{int mx;int mn;//int mxn;
}tree[N*4];
void buildtree(int l,int r,int node)
{int mid=(l+r)>>1;if(l==r){scanf("%d",&tree[node].mx);tree[node].mn=tree[node].mx;//tree[node].mxn=tree[node].mx-tree[node].mn;return;}buildtree(l,mid,node<<1);buildtree(mid+1,r,(node<<1)+1);tree[node].mx=max(tree[node<<1].mx,tree[(node<<1)+1].mx);tree[node].mn=min(tree[node<<1].mn,tree[(node<<1)+1].mn);//tree[node].mxn=tree[node].mx-tree[node].mn;
}
int queryu(int l,int r,int ll,int rr,int node)
{int k=0;int mid=(ll+rr)>>1;if(l<=ll && r>=rr) return tree[node].mx;if(l<=mid) k=max(k,queryu(l,r,ll,mid,node<<1));if(r>mid) k=max(k,queryu(l,r,mid+1,rr,(node<<1)+1));return k;
}
int queryt(int l,int r,int ll,int rr,int node)
{int k=mod;int mid=(ll+rr)>>1;if(l<=ll && r>=rr) return tree[node].mn;if(l<=mid) k=min(k,queryt(l,r,ll,mid,node<<1));if(r>mid) k=min(k,queryt(l,r,mid+1,rr,(node<<1)+1));return k;
}
int main()
{scanf("%d%d",&n,&m);buildtree(1,n,1);while(m--){scanf("%d%d",&x,&y);printf("%d\n",queryu(x,y,1,n,1)-queryt(x,y,1,n,1));}return 0;
}

转载于:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7131824.html

POJ 3264 Balanced Lineup相关推荐

  1. POJ 3264 Balanced Lineup

    POJ 3264 Balanced Lineup 题目链接 Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,00 ...

  2. POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53703   Accepted: 25237 ...

  3. poj 3264 Balanced Lineup RMQ问题 线段树

    For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...

  4. POJ 3264 Balanced Lineup(RMQ)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 24349   Accepted: 11348 ...

  5. POJ 3264 Balanced Lineup 【线段树】

    Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 50004 Accepted: 23434 Cas ...

  6. 【RMQ】POJ 3264 Balanced Lineup

    前言 这题出现在RMQRMQRMQ的WordWordWord文档中,我就直接把以前ACACAC过的程序交上去,结果WAWAWA了,然后才发现这道题还要求最小值... 链接 http://poj.org ...

  7. POJ 3264 Balanced Lineup (RMQ)

    Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same ...

  8. POJ 3264: Balanced Lineup

    2019独角兽企业重金招聘Python工程师标准>>> 题目在此 解题思路:查询区间最大值/最小值之差,最基础的线段树应用. 代码: #include <cstdio>/ ...

  9. POJ 3264.Balanced Lineup-RMQ(ST)详解

    先写一道水题的博客,为后面要写的博客做一个铺垫. ヾ(◍°∇°◍)ノ゙ RMQ(Range Minimum/Maximum Query),即区间最值查询,对于长度为n的数列A,回答若干询问RMQ(A, ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第14期)
  2. 30秒或更短的时间内弄懂的有用CSS代码片段
  3. 视障人士体验自动驾驶:携导盲犬登车,未来有望“自己开”
  4. 自动sqlldr脚本
  5. qpython3编辑器怎么用_Python快速入门系列:Pyqt5界面开发好帮手-Qss样式编辑器介绍...
  6. java并发编程实战阅读总结(a)
  7. 检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败
  8. android+ndk+r9+x64下载,Win7 64位中文旗舰版上Cocos2d-x 3.0的Android开发调试环境架设
  9. java 数组溢出异常,Java数组超出范围时如何处理多个异常?
  10. 在64位系统中无法看到Microsoft Excel Application的问题
  11. qt开发用的人多吗_新房认筹猫腻多!开发商只是为达到这个目的才认筹,你入坑了吗?...
  12. 陈纪修老师《数学分析》 第07章:定积分 笔记
  13. atmega168p与328p_与Arduino“本是同根”——Atmel ATmega328P-XMINI开发板评测
  14. widevine DRM 介绍
  15. 用计算机弹清明上河图谱,一篇文章让你看懂《清明上河图》中的所有细节
  16. 赫茨伯格的双因素激励理论(1966)--zt
  17. UVA - 1589 Xiangqi (象棋)
  18. rhino java api demo_用 Rhino 脚本化 Java
  19. iOS手机摄像头测心率
  20. 触漫机器人_触漫携手壹心理打破亲子僵局 让爱驻家守护亲子健康

热门文章

  1. Unity3D研究院之Editor下监听Transform变化
  2. 使用Git进行代码管理的心得
  3. 笔记:编写高质量代码 改善Java程序的151个建议
  4. xp下msn8.5无法安装的解决办法
  5. 基于kafka_2.11-2.1.0实现的生产者和消费者代码样例
  6. Django 学习第十一天——中间键和上下文处理器
  7. selenium中的对文本进行全选,复制,粘贴,剪切和删除的操作
  8. 函数中{}输出格式详解(C#)
  9. javaScript——廖雪峰老师学习笔记(一)
  10. oracle 操作表