题意:。

。。

策略如题。

思路:我们先如果仅仅求某一区间的最大值。我们仅仅须要利用线段树的模板。仅仅须要初始化和询问的时候小小的改动一下。改成祖先结点储存的不再是子节点的和而是两个子节点之间的最大值,这样我们能够求出最大值了,最小值也是这样求。

注意:由于询问的时候既要求最大值又要求最小值。所以要返回结构体。

代码:

#include <stdio.h>
#include <string.h>
#define M 100005 struct node{
int left, right;
int max, min;
};
node s[M*4]; void creat(int left, int right, int pos){
s[pos].left = left;
s[pos].right = right;
if(left == right){
scanf("%d", &s[pos].min);
s[pos].max = s[pos].min;
return;
}
int mid = (right+left)>>1;
creat(left, mid, pos<<1);
creat(mid+1, right, pos<<1|1);
s[pos].max = s[pos<<1].max>s[pos<<1|1].max? s[pos<<1].max:s[pos<<1|1].max;
s[pos].min = s[pos<<1].min<s[pos<<1|1].min? s[pos<<1].min:s[pos<<1|1].min;
} node query(int left, int right, int pos){ //要返回结构体
if(left == s[pos].left&&right == s[pos].right){
return s[pos];
} int mid = (s[pos].left+s[pos].right)>>1;
if(right <= mid) return query(left, right, pos<<1);
else if(left > mid) return query(left, right, pos<<1|1);
else{
node temp1 = query(left, mid, pos<<1);
node temp2 = query(mid+1, right, pos<<1|1);
node temp;
temp.max = temp1.max>temp2.max?temp1.max:temp2.max;
temp.min = temp1.min<temp2.min?temp1.min:temp2.min;
return temp;
}
} int main(){
int n, q, a, b;
scanf("%d%d", &n, &q);
creat(1, n, 1);
while(q --){
scanf("%d%d", &a, &b);
node temp = query(a, b, 1);
printf("%d\n", temp.max-temp.min);
}
return 0;
}

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119

nyoj 119 士兵杀敌(三) 【线段树】【单点更新】的更多相关文章

  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 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)

    Brainman Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10575   Accepted: 5489 Descrip ...

  4. HDU 1166 排兵布阵(线段树单点更新)

    题意: 给定n个兵营的士兵初始值, 然后有最多40000个操作: 操作一共有两种, 一个是查询给定[a,b]区间兵营的士兵总和. 另一个是增加/减少指定兵营的士兵数目. 输出每次查询的值. 分析: 线 ...

  5. HDU 1754 I Hate It 线段树单点更新求最大值

    题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...

  6. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  7. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  8. HDU 1166 敌兵布阵(线段树单点更新,板子题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. HDU 1166 敌兵布阵(线段树单点更新,区间查询)

    描述 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...

  10. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

随机推荐

  1. DevExpress的GridControl拖拽DraopDown后计算HitInfo的RowHandle错误

    最近在使用GridControl的拖拽功能时候遇到了一个问题:当GridControl触发DropDrop事件时,计算对应的RowHandle错误.当把鼠标拖拽到GridView一个单元格的靠上面的部 ...

  2. Solr.NET快速入门(五)【聚合统计,分组查询】

    聚合统计 属性 说明 Min 最小值 Max 最大值 Sum 总和 Count 记录数,也就是多少行记录 Missing 结果集中,有多少条记录是空值 SumOfSquares 平方和(x1^2 + ...

  3. python 微信红包

    def redbags(money, num=10): import random choice = random.sample(range(1, money * 100), num - 1) cho ...

  4. winFrom线程

    方法--->委托--->BeginInvoke用指定的参数异步执行委托 委托就是我想做什么,而你可以作什么,我就让你去做.

  5. Unity3d transform

    using UnityEngine; using System.Collections; public class transform : MonoBehaviour { // Use this fo ...

  6. 关于HTTPS通信机制的笔记

    一次安全可靠的通信--HTTPS原理 转自:腾讯开放社区raphealguo文章

  7. 关于各浏览器下Hack的写法

    下面是我收集有关于各浏览器下Hack的写法: 1.Firefox @-moz-document url-prefix() { .selector { property: value; } } 上面是仅 ...

  8. css处理图片下方留白问题

    引用图片的时候,图片和下方内容会有一点小空白,大概如下图紫色横条: 不是说有margin还是padding,是因为ing是行级元素,浏览器就会默认留白了,这时候处理方法很简单,给img加上样式disp ...

  9. DDoS攻击与防范策略

    DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是目前最强大.最难防御的攻击之一. 按照发起的方式 ...

  10. gulp创建完整的项目流程

    所有的环境都是在 node 安装好的基础上执行的. node -v 查看node的安装情况.npm -v查看npm 的安装情况. gulp自动化构建常用参数 1.src 读取文件或者文件夹 2.des ...