题意:。

。。

策略如题。

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

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

代码:

#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. C语言 - typedef struct 与struct

    c语言中可以选择的数据类型太少了. Java中有一些高级的数据结构. 结构中能够存放基本的数据类型以及其他的结构. 结构定义,一般放在程序的开头部分. 一般放在include之后. #include ...

  2. 国内物联网平台初探(八):中移物联网开放平台OneNet

    平台定位 OneNET是中移物联网有限公司搭建的开放.共赢设备云平台,为各种跨平台物联网应用.行业解决方案,提供简便的云端接入.存储.计算和展现,快速打造物联网产品应用,降低开发成本. IoT Paa ...

  3. [SCOI 2003] 字符串折叠

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1090 [算法] 区间DP [代码] #include<bits/stdc++. ...

  4. SNMP简单概述

    一.SNMP简单概述 1.1.什么是Snmp SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议& ...

  5. jQuery动画知识总结

    jQuery动画概述 我们之前实现的下拉菜单的案例,是没有动画效果的,但是在日常开发中,动画效果是经常会用到的,所以我们可以尝试使用jQuery动画,将下拉菜单案例实现的更动感一些. jQuery提供 ...

  6. Android ToolBar自定义图标,关联DrawerLayout

    Android5.0出现了一个可以代替ActionBar的控件ToolBar,使用更加灵活,一般我们使用ToolBar来和DrawerLayout配合使用,官方提供了一个开关类ActionBarDra ...

  7. (转载) popupWindow 指定位置上的显示

    popupWindow 指定位置上的显示 标签: androidpopupWindowpopupWindow具体位置放置 2014-07-09 16:23 1114人阅读 评论(0) 收藏 举报  分 ...

  8. 12.javaweb SQL标签库

    一.说明及使用 1,  首先要知道,开发中绝对不会SQL标签库在JSP中进行数据库操作,学习SQL标签库只是作为一个只是扩展 2,  SQL标签库分类 2.1<sql:setDataSource ...

  9. hdu3938 Portal 离线的并查集

    离线算法是将全部输入都读入,计算出所有的答案以后再输出的方法.主要是为避免重复计算.类似于计算斐波那契数列的时候用打表的方法. 题目:给一个无向图,求有多少个点对,使得两点间的路径上的花费小于L,这里 ...

  10. linq.sort

    reflections.Sort(delegate(ReflectionEntity a, ReflectionEntity b) { if (a.CreatedTime < b.Created ...