题目来源:

http://nyoj.top/web/contest/problem/cid/3/num/C

题目描述:

南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。

所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀敌数最低的人之间军功差值是多少。

现在,请你写一个程序,帮小工回答南将军每次的询问吧。

注意,南将军可能询问很多次。

输入描述:

只有一组测试数据
第一行是两个整数N,Q,其中N表示士兵的总数。Q表示南将军询问的次数。(1<N<=100000,1<Q<=1000000)
随后的一行有N个整数Vi(0<=Vi<100000000),分别表示每个人的杀敌数。
再之后的Q行,每行有两个正正数m,n,表示南将军询问的是第m号士兵到第n号士兵。

输出描述:

对于每次询问,输出第m号士兵到第n号士兵之间所有士兵杀敌数的最大值与最小值的差。

样例输入:

复制

5 2
1 2 6 9 3
1 2
2 4

样例输出:

1
7

参考代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define ll long long
const int inf = 0x3f3f3f3f;
const int N=100000+1;
using namespace std;
int a[N];
struct node{int minn,maxx;}f[N][20];
void RMQ(int n)
{for(int j=1; j<=20; j++)for(int i=1; i<=n; i++)if(i+(1<<j)-1<=n)f[i][j].maxx=max(f[i][j-1].maxx,f[i+(1<<(j-1))][j-1].maxx),f[i][j].minn=min(f[i][j-1].minn,f[i+(1<<(j-1))][j-1].minn);
}
void init(int n)
{for(int i=1;i<=n;i++)f[i][0].minn=a[i],f[i][0].maxx=a[i];
}
int main()
{int n,q;scanf("%d%d",&n,&q);for(int i=1;i<=n;i++)scanf("%d",&a[i]);init(n);RMQ(n);while(q--){int x,y;scanf("%d%d",&x,&y);int k=(int)(log((double)(y-x+1))/log(2.0));int Max=max(f[x][k].maxx,f[y-(1<<k)+1][k].maxx);int Min=min(f[x][k].minn,f[y-(1<<k)+1][k].minn);printf("%d\n",Max-Min);}return 0;
}

士兵杀敌(三)RMQ板子相关推荐

  1. NYOJ 119 士兵杀敌(三)

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...

  2. 蓝桥杯算法训练合集三 1.车的位置2.24点3.最大分解4.RP大冒险5.士兵杀敌(二)

    目录 1.车的位置(搜索) 2.24点(搜索) 3.最大分解(贪心) 4.RP大冒险 5.士兵杀敌(二) 1.车的位置(搜索) 问题描述 在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两 ...

  3. NYOJ 228 士兵杀敌(五)

    士兵杀敌(五) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

  4. NYOJ 116士兵杀敌(二) 树状数组

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=116 士兵杀敌(一) 数组是固定的,所以可以用一个sum数组来保存每个元素的和就行,但是不 ...

  5. nyoj116 士兵杀敌(二)树状数组 插点问线

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...

  6. 士兵杀敌(二)(线段树+树状数组)

    士兵杀敌(二) 时间限制:1000 ms  |           内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军 ...

  7. nyoj123士兵杀敌4-树状数组-改区间查点

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,总会有一批编号连在一起人请战,最终他们获得相同军功 ...

  8. nyoj116士兵杀敌2

    题目链接: 士兵杀敌2 链接二 解法线段树,线段树有些像是特殊的二叉平衡树,不知道的可以搜搜二叉平衡树,可能并没有你想象中的那样难. AC代码: #include <stdio.h> #i ...

  9. NYOJ 123 士兵杀敌(四)

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

最新文章

  1. 外网数据同步到内网方案_数据同步之解决方案
  2. 易成新能加码光伏产业链 作价28.29亿收购赛维两子公司
  3. .NET Core 下的爬虫利器
  4. [SCSS] Pure CSS for multiline truncation with ellipsis
  5. 自动化测试--8种定位方式以及等待详解
  6. 关于返回二维数组排序后序号数组的问题求解
  7. iOS Json解析框架之MJExtension使用详解
  8. 情感分析︱网络公开的免费文本语料训练数据集汇总
  9. 【原创】打造基于Dapper的数据访问层
  10. ArcGIS之图斑净面积计算工具(支持二调,三调)
  11. dataframe类型数据的遍历_pandas中遍历dataframe的每一个元素
  12. 模电数电EDA实验开发系统实验设备QY-MS301D
  13. 【ByteCTF 2022】Crypto Writeup
  14. thinkphp6+websocket 群聊实现
  15. 各个等级测试工程师所需的必要技能
  16. 如何恢复自身的精力 [转]
  17. Scrapy抓取接口中文数据显示问号问题
  18. 如何让HTML页面支持部分内容打印
  19. 高速破解wifi 使用airolib-ng
  20. 【装机必备】一款必备的解压缩工具!

热门文章

  1. C#静态(ststic)
  2. 2D DenseUnet-based脑胶质瘤分割BraTs+论文翻译+代码实现
  3. JAVA学习Day3
  4. 数据结构与算法37-堆石子
  5. 北京燕化附中2021年高考成绩查询,2021年北京最好的高中排名,北京重点高中排名榜公布...
  6. 【CF1154】题解
  7. 2021东南亚新兴平台Lazada开店入驻最全流程Lazada新店运营思路分享
  8. flv视频怎么转换成mp4格式的3种方法分享
  9. C++ 下载 Minio 的文件
  10. Typora如何打出小黑点,空心圆,小方框