[USACO07JAN]Balanced Lineup
OJ题号:
洛谷2880
思路1:
线段树维护区间最大最小值。
#include<cstdio>
#include<cctype>
#include<utility>
#include<algorithm>
inline int getint() {
char ch;
bool sgn=false;
while(!isdigit(ch=getchar())) if(ch=='-') sgn=true;
int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return sgn?-x:x;
}
const int inf=0x7fffffff;
const int N=;
class SegmentTree {
#define _left <<1
#define _right <<1|1
private:
int max[N<<],min[N<<];
void push_up(const int p) {
max[p]=std::max(max[p _left],max[p _right]);
min[p]=std::min(min[p _left],min[p _right]);
}
public:
void build(const int p,const int b,const int e) {
if(b==e) {
max[p]=min[p]=getint();
return;
}
int mid=(b+e)>>;
build(p _left,b,mid);
build(p _right,mid+,e);
push_up(p);
}
std::pair<int,int> query(const int p,const int b,const int e,const int l,const int r) {
if((b==l)&&(e==r)) {
return std::make_pair(max[p],min[p]);
}
int mid=(b+e)>>;
int max=,min=inf;
if(l<=mid) {
std::pair<int,int> tmp=query(p _left,b,mid,l,std::min(mid,r));
max=std::max(max,tmp.first);
min=std::min(min,tmp.second);
}
if(r>mid) {
std::pair<int,int> tmp=query(p _right,mid+,e,std::max(mid+,l),r);
max=std::max(max,tmp.first);
min=std::min(min,tmp.second);
}
return std::make_pair(max,min);
}
};
SegmentTree t;
int main() {
int n=getint(),m=getint();
t.build(,,n);
while(m--) {
int l=getint(),r=getint();
std::pair<int,int> tmp=t.query(,,n,l,r);
printf("%d\n",tmp.first-tmp.second);
}
return ;
}
思路2:
倍增法求RMQ。
#include<cmath>
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
char ch;
while(!isdigit(ch=getchar()));
int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=,logN=log2(N)+;
int min[N][logN],max[N][logN];
int main() {
int n=getint(),m=getint();
for(int i=;i<=n;i++) {
min[i][]=max[i][]=getint();
}
for(int j=;j<=log2(n);j++) {
for(int i=;i<=n-(<<j)+;i++) {
min[i][j]=std::min(min[i][j-],min[i+(<<(j-))][j-]);
max[i][j]=std::max(max[i][j-],max[i+(<<(j-))][j-]);
}
}
while(m--) {
int l=getint(),r=getint();
int k=log2(r-l+);
printf("%d\n",std::max(max[l][k],max[r+-(<<k)][k])-std::min(min[l][k],min[r+-(<<k)][k]));
}
return ;
}
[USACO07JAN]Balanced Lineup的更多相关文章
- 洛谷 P2880 [USACO07JAN]Balanced Lineup G (ST表模板)
题意:给你一组数,询问\(q\)次,问所给区间内的最大值和最小值的差. 题解:经典RMQ问题,用st表维护两个数组分别记录最大值和最小值然后直接查询输出就好了 代码: int n,q; int a[N ...
- 洛谷P2880 [USACO07JAN] Balanced Lineup G(树状数组/线段树)
维护区间最值的模板题. 1.树状数组 1 #include<bits/stdc++.h> 2 //树状数组做法 3 using namespace std; 4 const int N=5 ...
- ST表 || RMQ问题 || BZOJ 1699: [Usaco2007 Jan]Balanced Lineup排队 || Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup
题面:P2880 [USACO07JAN]平衡的阵容Balanced Lineup 题解: ST表板子 代码: #include<cstdio> #include<cstring&g ...
- P2880 [USACO07JAN]平衡的阵容Balanced Lineup(RMQ的倍增模板)
题面:P2880 [USACO07JAN]平衡的阵容Balanced Lineup RMQ问题:给定一个长度为N的区间,M个询问,每次询问Li到Ri这段区间元素的最大值/最小值. RMQ的高级写法一般 ...
- P2880 [USACO07JAN]平衡的阵容Balanced Lineup
P2880 [USACO07JAN]平衡的阵容Balanced Lineup RMQ RMQ模板题 静态求区间最大/最小值 (开了O2还能卡到rank9) #include<iostream&g ...
- 【洛谷】P2880 [USACO07JAN]平衡的阵容Balanced Lineup(st表)
题目背景 题目描述: 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连 ...
- [USACO07JAN]平衡的阵容Balanced Lineup
[USACO07JAN]平衡的阵容Balanced Lineup 题目描述 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) a ...
- poj 3264:Balanced Lineup(线段树,经典题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 32820 Accepted: 15447 ...
- Balanced Lineup(树状数组 POJ3264)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 40493 Accepted: 19035 Cas ...
随机推荐
- 单字节编码&双字节编码
单字节编码(WINDOWS-1252.ISO-8859-1.UTF-8) 双字节编码(UTF-16) Windows 记事本默认会将文件保存为单字节的 ANSI(ASCII).如果您选择 " ...
- css 基础2
1.内部样式表: 2.行内样式表:在标签内写style,适合style 比较少的情况 3.外部样式表(外联式): 4.html标签可以分为:块级标签,h1~h6,div ,p,ul,ol,li,div ...
- JMS学习(二)之ActiveMQ
1,ActiveMQ是Apache实现的基于JMS的一个消息服务器.下面记录ActiveMQ的一些基本知识. 2,ActiveMQ connectors:ActiveMQ providesconnec ...
- [转载]嵌入式C语言中的Doxygen注释模板
http://blog.csdn.net/willerency/article/details/7083953 嵌入式C语言开发中通常使用Doxygen进行文档的生成.Doxygen支持多种格式,非常 ...
- iOS问题#解决方案#之关于“application/x-www-form-urlencoded;charset=utf-8” not supported
http://www.cnblogs.com/ChenYilong http://www.cnblogs.com/ChenYilong 如果你用的是AFN/ASI,那得修改源代码了,因为AFN ...
- npm 更换阿里镜像
使用NPM(Node.js包管理工具)安装依赖时速度特别慢,只需要使用–registry参数指定镜像服务器地址, npm install your-need-model --registry=http ...
- sequelize初使用
官网地址:Sequelize Sequelize is a promise-based ORM for Node.js v4 and up. It supports the dialects Post ...
- python垃圾回收二
由于循环引用的存在,我们在删除了a跟b之后,引用计数是1,这样,现有的垃圾回收机制是永远不可能把她们删除了.他们将永远存在于内存中. 我们当然不能对这种情况置之不理,于是,我们又添加了两种新的回收机制 ...
- [转]python ctypes 探究 ---- python 与 c 的交互
近几天使用 python 与 c/c++ 程序交互,网上有推荐swig但效果都不理想,所以琢磨琢磨了 python 的 ctypes 模块.同时,虽然网上有这方面的内容,但是感觉还是没说清楚.这里记录 ...
- mysql8.0 在window环境下的部署与配置
今天在阿里云window服务器上配置mysql环境,踩了一些坑,分享出来.需要的朋友可以看看.额,或许有人要吐槽我为什么不在linux上去配置,额,因为我window的那台服务器配置相对高些.本人技术 ...