士兵杀敌(三)

时间限制: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<stdio.h>
typedef struct NODE
{
int max, min;
int start, end;
}Node;
Node tree[1211110];
int max, min;
void buildtree(int root, int start, int end)
{
tree[root].start = start;
tree[root].end = end;
tree[root].max = -0x7fffffff;
tree[root].min = 0x7fffffff;
if(start < end)
{
buildtree(root * 2, start, (start + end)/ 2);
buildtree(root * 2 + 1, (start + end) / 2 + 1, end);
}
}
void insert(int root, int pos, int num)
{ if(tree[root].max < num)
tree[root].max = num;
if(tree[root].min > num)
tree[root].min = num;
// if(tree[root].start == pos && tree[root].end == pos)
// return ;
if(tree[root].start < tree[root].end)
{
if(pos < (tree[root].start + tree[root].end) / 2 + 1)
insert(root * 2, pos, num);
else
insert(root * 2 + 1, pos, num);
}
}
void quest(int root, int start, int end)
{
if(tree[root].max <= max && tree[root].min >= min)
return ;
if(start == tree[root].start && end == tree[root].end )
{
max = max > tree[root].max ? max : tree[root].max;
min = min < tree[root].min ? min : tree[root].min;
return;
}
if(end < (tree[root].start + tree[root].end) / 2 + 1)
quest(root * 2, start, end);
else if(start >( tree[root].start + tree[root].end) / 2)
quest(root * 2 + 1, start, end);
else
{
quest(root * 2, start, (tree[root].start + tree[root].end) / 2);
quest(root * 2 + 1, (tree[root].start + tree[root].end) / 2 + 1, end);
}
}
int main()
{
int n, q;
scanf("%d %d", &n, &q);
buildtree(1, 1, n);
int i;
int num;
for(i = 1; i <= n; i++)
{
scanf("%d", &num);
insert(1, i, num);
}
int s, e;
for(i = 1; i <= q; i++)
{
scanf("%d%d", &s, &e);
max = -1;
min = 0x7fffffff;
quest(1, s, e);
printf("%d\n", max-min);
}
return 0;
}

POJ 3264-Balanced Lineup, NYOJ 119-士兵杀敌3 线段树的更多相关文章

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

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

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

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

  3. Poj 3264 Balanced Lineup RMQ模板

    题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...

  4. POJ 3264 Balanced Lineup 【ST表 静态RMQ】

    传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total S ...

  5. poj 3264 Balanced Lineup (RMQ)

    /******************************************************* 题目: Balanced Lineup(poj 3264) 链接: http://po ...

  6. POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53703   Accepted: 25237 ...

  7. POJ - 3264——Balanced Lineup(入门线段树)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 68466   Accepted: 31752 ...

  8. poj 3264 Balanced Lineup 题解

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Subm ...

  9. poj 3264 Balanced Lineup 区间极值RMQ

    题目链接:http://poj.org/problem?id=3264 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) alw ...

随机推荐

  1. 【转】HTML - embed 与 object 之争

    在 HTML 里嵌入文本和图片之外的事物,就会用到嵌入标签,而嵌入标签在各浏览器之间的不统一,一直是让开发人员很头痛的问题.一切都要从嵌入 SUN 公司的 Applet Java 小程序开始. 当时, ...

  2. MvcPager2.0 中分页初始化失败的问题

    页面初始化时只有一页数据,或没数据时,出现分页控件初始化失败以及后续Ajax分页功能失效的问题, <div class="pagin"> <div class=& ...

  3. 【Swift】读取文本文件字符串

    var str:NSString = NSString.stringWithContentsOfFile(_srcouceFilePath,encoding:NSUTF8StringEncoding, ...

  4. Android 服务端开发之开发环境配置

    Android 服务端开发之开发环境配置 这里是在Eclipse的基础上安装PhpEclipse插件方法,PHPEclipse是Eclipse的 一个用于开发PHP的插件.当然也可以采用Java开发a ...

  5. Struts2 - Action no cache

    整了两天,终于找到一个比较满意的答案了:如何让action不被浏览器缓存 写一个interceptor: package com.my.interceptor; import javax.servle ...

  6. SSL使用windows证书库中证书实现双向认证

    前一段时间对OpenSSL库中的SSL通讯稍微琢磨了一下,在百度文库中找了个示例程序,然后在机器上跑,哇塞,运行成功!那时那个惊喜啊,SSL蛮简单的嘛.前几天,老板要我整一个SSL通讯,要使用wind ...

  7. RDO部署openstack(3)

    目前OpenStackNeutron框架支持的网络服务有:LoadBalancing as a Service,VPNas a Service,Firewallas a Service. 1. 安装和 ...

  8. Python 正则表达式-OK

    Python正则表达式入门 一. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上 ...

  9. activiti自定义流程之自定义表单(三):表单列表及预览和删除

    注:(1)环境配置:activiti自定义流程之自定义表单(一):环境配置 (2)创建表单:activiti自定义流程之自定义表单(二):创建表单 自定义表单创建成功,要拿到activiti中使用,自 ...

  10. kafka_2.11-0.8.2.2的搭建

    一.下载官网的压缩包~ 修改conf/server.properties host.name=10.10.224.12  (修改为主机ip,不然服务器返回给客户端的是主机的hostname,客户端并不 ...