士兵杀敌(三)

时间限制: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 2
1 2 6 9 3
1 2
2 4
例子输出
1
7
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
//#define lowbit(i) i&(-i) //lowbit能够直接define。不须要定义函数
using namespace std; //那么F(i,0)的值是确定的,就为i这个位置所指的元素值,
//这时我们能够把区间[i,i+2^j-1]平均分为两个区间,由于j>=1的时候该区间的长度始终为偶数。
//能够分为区间[i,i+2^(j-1)-1]和区间[i+2^(j-1)-1,i+2^j-1]。即取两个长度为2^(j-1)的块代替和更新长度为2^j的块。
//那么最小值就是这两个区间的最小值的最小值,动态规划为:F[i,j]=min(F[i,j-1],F[i+2^(j-1),j-1]).
//F[i,j]=max(F[i,j-1],F[i+2^(j-1),j-1]).
//k=ln(j-i+1)/ln2
//同理:最大值就是F[i,j]=max(F[i,j-1],F[i+2^(j-1),j-1]).F[i,j]=min(F[i,j-1],F[i+2^(j-1)+1,j-1]);
//
const int N=100100;
int max_sum[20][N],min_sum[20][N];
void RMQ(int num)
{
for(int i=1;i!=20;i++)
{
for(int j=1;j<=num;j++)
{
if(j+(1<<i)-1<=num) //i<<i==2^i
{
max_sum[i][j]=max(max_sum[i-1][j],max_sum[i-1][j+(1<<i>>1)]);
min_sum[i][j]=min(min_sum[i-1][j],min_sum[i-1][j+(1<<i>>1)]); }
}
}
}
int main()
{
int num,query;
while(~scanf("%d %d",&num,&query))
{
for(int i=1;i<=num;i++)
{
scanf("%d",&max_sum[0][i]);
min_sum[0][i]=max_sum[0][i];
}
RMQ(num);
while(query--)
{
int begin,end;
scanf("%d %d",&begin,&end);
int k=(int)(log(end-begin+1.0)/log(2.0));
int max1=max(max_sum[k][begin],max_sum[k][end-(1<<k)+1]);
int min1=min(min_sum[k][begin],min_sum[k][end-(1<<k)+1]);
printf("%d\n",max1-min1);
}
}
return 0;
}

NYoj-119-士兵杀敌(3)-RMQ算法的更多相关文章

  1. NYOJ 119 士兵杀敌(三) RMQ ST

    NYOJ 119 士兵杀敌(三) RMQ ST 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 思路: ST在线 预处理O(nlog ...

  2. NYOJ 119 士兵杀敌(三)【ST算法】 分类: Brush Mode 2014-11-13 20:56 101人阅读 评论(0) 收藏

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 解题思路: RMQ算法. 不会的可以去看看我总结的RMQ算法. http://blo ...

  3. nyoj 119士兵杀敌(三)(线段树区间最值查询,RMQ算法)

    题目119 题目信息 执行结果 本题排行 讨论区 士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描写叙述 南将军统率着N个士兵,士兵分别编号为1~N,南将军常 ...

  4. NYOJ 119 士兵杀敌(三)(RMQ算法)

    採用的的是小牛的写法,蒟蒻第一次写.. RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n).返回数 ...

  5. nyoj 119 士兵杀敌(三)(RMQ)

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

  6. nyoj 119 士兵杀敌(三)【线段树区间最大值最小值差】

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

  7. NYOJ 119 士兵杀敌(三) (线段树)

    题目链接 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算 ...

  8. nyoj 119: 士兵杀敌(三) 【RMQ模板】

    题目链接 贴个板子.. #include<bits/stdc++.h> using namespace std; int n,q; ],d1[][],d2[][]; void RMQ_in ...

  9. nyoj 119 士兵杀敌(三) 【线段树】【单点更新】

    题意:. .. 策略如题. 思路:我们先如果仅仅求某一区间的最大值.我们仅仅须要利用线段树的模板.仅仅须要初始化和询问的时候小小的改动一下.改成祖先结点储存的不再是子节点的和而是两个子节点之间的最大值 ...

  10. NYOJ 116 士兵杀敌 (线段树,区间和)

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

随机推荐

  1. hashmap的遍历方法

    How to iterate over the entries of a Map? What is the order of iteration - if you are just using Map ...

  2. AVL树理解

    AVL树理解 简介 我们知道,AVL树也是平衡树中的一种,是自带平衡条件的二叉树,始终都在维护树的高度,保持着树的高度为logN,同时把插入.查找.删除一个结点的时间复杂度的最好和最坏情况都维持在O( ...

  3. nginx 站点代理,负载均衡

    nginx服务器IP是192.168.1.201 web服务器 IP 192.168.1.200,192.168.1.199 1.主配置文件是/etc/nginx/下的nginx.conf,另外一个是 ...

  4. 手把手教你搭建nuget服务器

    新建web项目 工具:VS2013 版本:.Net Framework 4.6,低版本也行,不过要找到对应版本的Nuget.Server 装了NuGet客户端(百度如何安装) WebForm或MVC都 ...

  5. 预防Redis缓存穿透、缓存雪崩解决方案

    最近面试中遇到redis缓存穿透.缓存雪崩等问题,特意了解下. redis缓存穿透: 缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有.这样就导致用户查询的时候,在缓存中找不到,每次都要去 ...

  6. Syncovery : Google Docs protocol completely replaced with Google Drive

    Google Docs protocol completely replaced with Google Drive In May 2015, the older Google Docs API wa ...

  7. BitmapFactory.Options.inSampleSize 的使用方法

    BitmapFactory.decodeFile(imageFile); 用BitmapFactory解码一张图片时.有时会遇到该错误. 这往往是因为图片过大造成的. 要想正常使用,则须要分配更少的内 ...

  8. 纯文本抽出程序库DMC TEXT FILTER

    因需而生,红樱枫为文本转换市场领航 --纯文本抽出程序库DMC TEXT FILTER,从需求中把握平衡 在高度数字化的今天,数字图书馆已经成为非常多人查询资料的有效途径.然而即使在畅通的宽带搜寻中一 ...

  9. DAHON 美国大行

    DAHON美国大行1982年创立于美国加州,多年来一直率先推动环保的代步工具——折叠自行车.创新是大行的生命,从韩氏兄弟发明了全世界第一辆小到能够放进火车座椅底下的折叠自行车起,大行就开启了不断向前的 ...

  10. 数据库实例: STOREBOOK > 表空间 > 编辑 表空间: SYSAUX

    ylbtech-Oracle:数据库实例: STOREBOOK  >  表空间  >  编辑 表空间: SYSAUX  表空间  >  编辑 表空间: SYSAUX 1. 一般信息返 ...