题面:P2880 [USACO07JAN]平衡的阵容Balanced Lineup

RMQ问题:给定一个长度为N的区间,M个询问,每次询问Li到Ri这段区间元素的最大值/最小值。

RMQ的高级写法一般有两种,即为线段树(并不很会╥﹏╥...)和ST表(一种利用dp求解区间最值的倍增算法)

定义:maxx[i][j]和minn[i][j]分别表示i到i+2^j-1这段区间的最大值和最小值。

预处理:maxx[i][0]=minn[i][0]=a[i]。即i到i区间的最大值、最小值都是a[i]。

状态转移:将maxx[i][j]、minn[i][j]平均分成两段,一段为maxx[i][j-1],另一段为maxx[i+2^(j-1)][j-1]。

两段的长度均为2^j-1。

maxx[i][j]的最大值即这两段的最大值中的最大值。

minn[i][j]的最小值即这两段的最小值中的最小值。

得到:

  maxx[i][j]=max(maxx[i][j-1],maxx[i+2^(j-1)][j-1]),

  minn[i][j]=min(minn[i][j-1],minn[i+2^(j-1)][j-1])。

emmmmmmm就这样

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,maxx[][],minn[][];
int rd(){
int x=,fl=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')fl=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return fl*x;
}
void rmq(){
for(int j=;j<=;j++)
for(int i=;i<=n;i++)
if(i+(<<j)<=n+){
int k=i+(<<(j-));
maxx[i][j]=max(maxx[i][j-],maxx[k][j-]);
minn[i][j]=min(minn[i][j-],minn[k][j-]);
}
}
int cal(int l,int r){
int k=log(r-l+)/log();
return max(maxx[l][k],maxx[r-(<<k)+][k])-min(minn[l][k],minn[r-(<<k)+][k]);
}
void print(int x){
if(x<){putchar('-');x=-x;}
if(x>)print(x/);
putchar(x%+'');
}
int main(){
n=rd();m=rd();
for(int i=;i<=n;i++){
maxx[i][]=rd();
minn[i][]=maxx[i][];
}
rmq();
for(int i=;i<=m;i++){
int l=rd(),r=rd();
print(cal(l,r));putchar('\n');
}
return ;
}
  

P2880 [USACO07JAN]平衡的阵容Balanced Lineup(RMQ的倍增模板)的更多相关文章

  1. Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup (ST表模板)

    传送门(ST表裸题) ST表是一种很优雅的算法,用于求静态RMQ 数组l[i][j]表示从i开始,长度为2^j的序列中的最大值 注意事项: 1.核心部分: ; (<<j) <= n; ...

  2. P2880 [USACO07JAN]平衡的阵容Balanced Lineup

    P2880 [USACO07JAN]平衡的阵容Balanced Lineup RMQ RMQ模板题 静态求区间最大/最小值 (开了O2还能卡到rank9) #include<iostream&g ...

  3. ST表 || RMQ问题 || BZOJ 1699: [Usaco2007 Jan]Balanced Lineup排队 || Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup

    题面:P2880 [USACO07JAN]平衡的阵容Balanced Lineup 题解: ST表板子 代码: #include<cstdio> #include<cstring&g ...

  4. 【洛谷】P2880 [USACO07JAN]平衡的阵容Balanced Lineup(st表)

    题目背景 题目描述: 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连 ...

  5. 洛谷—— P2880 [USACO07JAN]平衡的阵容Balanced Lineup

    https://www.luogu.org/problemnew/show/P2880 题目背景 题目描述: 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序 ...

  6. 【luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2880 是你逼我用ST表的啊qaq #include <cstdio> #include < ...

  7. [USACO07JAN]平衡的阵容Balanced Lineup RMQ模板题

    Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 50000 + ...

  8. 洛谷P2880 [USACO07JAN]平衡的阵容Balanced Lineup 题解

    题目链接: https://www.luogu.org/problemnew/show/P2880 分析: ST表实现即可,一个最大值数组和最小值数组同时维护 代码: #include<cstd ...

  9. [USACO07JAN]平衡的阵容Balanced Lineup

    [USACO07JAN]平衡的阵容Balanced Lineup 题目描述 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) a ...

随机推荐

  1. Btrace官方教程-中文版

    教程英文版来源:https://github.com/btraceio/btrace/blob/master/docs/usersguide.html BTrace用户指南 BTrace是一种安全,动 ...

  2. 996 icu我能为你做什么?

    今天996,未来icu 996icu地址:https://github.com/996icu/996.ICU 前段时间github上出现了,一个讨论996的项目,这个项目使中国的软件工程师达到了空前的 ...

  3. “帮你”APP——NABCD需求分析

    1.你的创意解决了用户的什么需求?(N) 本学校已存在的失物招领.表白墙.二手市场等QQ群普遍存在信息冗杂,时效性差等缺点.不能充分发挥信息有效性的,我们的“帮你”APP能够充分发挥信息的有效性,让失 ...

  4. Django ORM中常用字段和参数

    一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...

  5. SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁

    死锁概述 对于数据库中出现的死锁,通俗地解释就是:不同Session(会话)持有一部分资源,并且同时相互排他性地申请对方持有的资源,然后双方都得不到自己想要的资源,从而造成的一种僵持的现象.当然,在任 ...

  6. week07 codelab02 C72

    ss 我们要改一下backendserver的service 因为要写几个api还要做很多操作 我们单独写出来 然后由service来调用 import json import os import p ...

  7. python字符串 列表 元组 字典相关操作函数总结

    1.字符串操作函数 find 在字符串中查找子串,找到首次出现的位置,返回下标,找不到返回-1 rfind 从右边查找 join 连接字符串数组 replace 用指定内容替换指定内容,可以指定次数 ...

  8. Reactive Programming

    Reactive的表现 Reactive 规范是 JVM Reactive 扩展规范 Reactive Streams JVM,而 Reactive 实现框架则是最典型的实现: Reactive St ...

  9. Unix/Linux系统的发展史

    Unix/Linux系统相信是学编程的人都认识这两个系统.我们知道Unix要钱,而Linux免费,而且这两者之间的发展史是什么样的,是不是两者就是同一个东西呢? 我将会以时间的发展过程来一步步的给大家 ...

  10. 【CPU微架构设计】分布式多端口(4写2读)寄存器堆设计

    寄存器堆(Register File)是微处理的关键部件之一.寄存器堆往往具有多个读写端口,其中写端口往往与多个处理单元相对应.传统的方法是使用集中式寄存器堆,即一个集中式寄存器堆匹配N个处理单元.随 ...