NYOJ_119_士兵杀敌(三)(RMQ-ST)
来源:互联网 发布:守望者 知乎 编辑:程序博客网 时间:2024/06/17 13:18
士兵杀敌(三)
时间限制:2000 ms | 内存限制:65535 KB
难度:5
- 描述
南将军统率着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 21 2 6 9 31 22 4样例输出
17
分析:RMQ-ST算法模板题。
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119
代码清单:
#include<set>#include<map>#include<cmath>#include<queue>#include<stack>#include<ctime>#include<string>#include<cstdio>#include<cctype>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;typedef unsigned int uint;typedef unsigned long long ull;const int maxn = 100010;const int max_pos = 20 ;int N,Q,l,r;int V[maxn];int maxq[maxn][max_pos];int minq[maxn][max_pos];void init(){ memset(maxq,-1,sizeof(maxq)); memset(minq,0x7f,sizeof(minq));}void input(){ scanf("%d%d",&N,&Q); for(int i=1;i<=N;i++) scanf("%d",&V[i]);}void RMQ_ST(){ int L=(int)((log(N))/(log(2.0))); for(int i=1;i<=N;i++) {maxq[i][0]=minq[i][0]=V[i];} for(int j=1;j<=L;j++){ for(int i=1;i+(1<<j)-1<=N;i++){ maxq[i][j]=max(maxq[i][j-1],maxq[i+(1<<(j-1))][j-1]); minq[i][j]=min(minq[i][j-1],minq[i+(1<<(j-1))][j-1]); } }}void solve(){ RMQ_ST(); for(int i=1;i<=Q;i++){ scanf("%d%d",&l,&r); int mi=(int)((log(r-l+1.0))/(log(2.0))); int maxnum=max(maxq[l][mi],maxq[r-(1<<mi)+1][mi]); int minnum=min(minq[l][mi],minq[r-(1<<mi)+1][mi]); printf("%d\n",maxnum-minnum); }}int main(){ init(); input(); solve(); return 0;}
0 0
- NYOJ_119_士兵杀敌(三)(RMQ-ST)
- NYOJ_119_士兵杀敌(三)
- [NYOJ 119] 士兵杀敌(三) (RMQ ST算法)
- NYOJ 119 士兵杀敌(三) (RMQ ST算法)
- NYOJ119士兵杀敌(三)RMQ问题之ST…
- 【nyoj 119】 士兵杀敌(三) 【RMQ ST算法】
- 士兵杀敌(三)rmq
- 【RMQ】士兵杀敌(三)
- 士兵杀敌(三)(RMQ算法)
- NYOJ - 士兵杀敌(三)(RMQ)
- 士兵杀敌(三) RMQ算法
- RMQ问题(士兵杀敌(三))
- NYOJ 119 士兵杀敌(三)【RMQ】
- nyoj--119 士兵杀敌(三)(RMQ)
- NYOJ119 士兵杀敌(三)(RMQ算法)
- 【RMQ】nyoj-119 士兵杀敌(三)
- nyoj119 士兵杀敌(三)RMQ算法
- 士兵杀敌 三 【ST算法】
- Leetcode: Bitwise AND of Numbers Range
- Java中的一些常见类System、Runtime、Date与Carendar
- Servlet学习1
- ACM1008:Elevator
- [python]学习笔记4-关于列表去重练习
- NYOJ_119_士兵杀敌(三)(RMQ-ST)
- mysql和oracle的连接
- Java内部类的作用
- Android 与 JDK 下查找包下的类
- hdoj 4123 Bob’s Race 【树的直径 + RMQ】 【二分查询会超时】
- offsetLeft与style.left的区别
- 欢迎使用CSDN-markdown编辑器
- 【前端学习笔记】Javascript中的正则表达式-实例
- 博客第一言