效率至上

Time Limit: 5000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

题意很简单,给出一个数目为n的非有序序列,然后有m次查询.对于每次查询输入两个正整数l,r请输出区间[l,r]的最大值与最小值的差值

Input

第一行:输入两个正整数n,m    (1<=n<=50000,  1<=m<=200000  );

第二行:输入n个整数  大小范围为[1,100000];

接下来的m行,每次两个正整数l,r (1<=l<=r<=n);

Output

输出区间[l,r]最大值与最小值的差值.

Sample Input

6 3
1
7
3
4
2
5
1 5
4 6
2 2

Sample Output

6
3
0

多次尝试用一个查询函数中得到差值,发现难度比较大,无奈,那就干脆分两步吧

#include <iostream>
#define INF 999999
using namespace std;struct node
{int l, r;int Max, Min;
};int Begin[1000001];
struct node tree[1000001];void Buildtree( int root, int l, int r )
{tree[root].l = l;tree[root].r = r;if( l == r )tree[root].Max = tree[root].Min = Begin[l];else{int mid = ( l + r ) / 2;Buildtree( 2 * root + 1, l, mid );Buildtree( 2 * root + 2, mid + 1, r);tree[root].Max = max( tree[2*root+1].Max, tree[2*root+2].Max );tree[root].Min = min( tree[2*root+1].Min, tree[2*root+2].Min );}
}int FindMax ( int root, int l, int r )
{int i = tree[root].l, j = tree[root].r;if( i > r || j < l )return 0;l = max( l, i );r = min( r, j );if( i == l && j == r )return tree[root].Max;return max( FindMax( 2*root+1, l, r ), FindMax( 2*root+2, l, r ));
}int FindMin ( int root, int l, int r )
{int i = tree[root].l, j = tree[root].r;if( i > r || j < l )return INF;l = max( l, i );r = min( r, j );if( i == l && j == r )return tree[root].Min;return min( FindMin( 2*root+1, l, r ), FindMin( 2*root+2, l, r ));
}int main()
{int i, n, m;cin >> n >> m;for( i=0; i<n; i++ )cin >> Begin[i];Buildtree ( 0, 0, n-1 );while( m-- ){int l, r;cin >> l >> r;cout << FindMax ( 0, l-1, r-1 )  -  FindMin ( 0, l-1, r-1 ) << endl;;}return 0;
}

转载于:https://www.cnblogs.com/gaojinmanlookworld/p/10586877.html

SDUT OJ 效率至上(线段树)相关推荐

  1. 【北航oj】(线段树取模运算)

    题干: https://buaacoding.cn/contest-ng/index.html#/334/problems K wjj 的自动售货机 时间限制:1000ms   内存限制:131072 ...

  2. 洛谷OJ U552 守墓人 线段树模板题

    题目描述 Description 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然... ...

  3. 数据结构:线段树及ST算法比较

    ST算法是一种高效的计算区间最值的方法. 他的思想是将询问区间分解成两个最长的二次幂的长度的区间并集的形式. 所以与线段树不同,这种区间分解其实存在相交的分解. 因此ST算法能维护的只是一些简单的信息 ...

  4. [BZOJ4811][Ynoi2017]由乃的OJ 树链剖分+线段树

    4811: [Ynoi2017]由乃的OJ Time Limit: 6 Sec  Memory Limit: 256 MB Submit: 405  Solved: 134 [Submit][Stat ...

  5. BZOJ-4811: [Ynoi2017]由乃的OJ (树链剖分 线段树维护区间操作值 好题)

    4811: [Ynoi2017]由乃的OJ Time Limit: 6 Sec  Memory Limit: 256 MB Submit: 366  Solved: 118 [Submit][Stat ...

  6. NUIST OJ 1350-1352 面朝大海,春暖花开【初识线段树】

    NUIST OJ 1350-1352 面朝大海,春暖花开 NUIST OJ 1350-1352 面朝大海春暖花开 NUIST OJ 1350 面朝大海 春暖花开 基础版 NUIST OJ 1351 面 ...

  7. 线段树(假)练习题一(学校OJ的题)

    Description 桌子上零散地放着若干个盒子,桌子的后方是一堵墙.如右图所示.现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上.问影子的总宽度是多少? Sample Input 20 ...

  8. [BZOJ4811][YNOI2017]由乃的OJ(树链剖分+线段树)

    起床困难综合症那题,只要从高往低贪心,每次暴力跑一边看这一位输入0和1分别得到什么结果即可. 放到序列上且带修改,只要对每位维护一个线段树,每个节点分别记录0和1从左往右和从右往左走完这段区间后变成的 ...

  9. NEFU OJ 1266-快乐的雨季-线段树【题解】

    题目链接:problem-1266 快乐的雨季 简单说明: 模板题--线段树的区间更新(更新,不是替换).区间查询.没有什么难以理解的.值得注意的是,数据规模最大的情况下每个点会达到1e9这样子,那么 ...

最新文章

  1. 我的4年学习心得:AI 应该是一个整体!
  2. [实战虚拟化]无需借助虚机安装,就能从VHD原生启动
  3. 【python自动化办公03】word操作-文档内容替换
  4. Python(2):基本数据类型
  5. mysql date类型加一个月jdbc_JDBC操作数据库Date类型数据
  6. 基于leveldb,levigo做二次开发
  7. Stream从Python切换到Go的原因
  8. OpenShift 4 - 多云管理(2) - 部署应用
  9. IntelliJ IDEA使用技巧——关于版本控制(上)
  10. Hanlp-地名识别调试方法详解
  11. 人类基因组大数据分析(大数据人工智能公司)
  12. 我打算学计算机学英语,英语人教版八年级上册我打算学习计算机科学.doc
  13. 如何在手机上查银行卡号?进来手把手教你!
  14. SEP12.1.2现在支持自动卸载其他某些杀毒软件
  15. 段码式显示屏和背光电路怎么设计?
  16. 用命令提示符打开资源管理器目录
  17. get这3种方式 轻松发送邮件超大附件
  18. Android微信登陆
  19. 新能源光伏发电的原理是怎样太阳能光伏阵列并网发电仿真模拟运行演示系统
  20. node.js服务端笔记文档学会写接口,学习分类:path、包、模块化、fs、express、中间件、jwt、开发模式、cors。

热门文章

  1. 【bzoj1146】 [CTSC2008]网络管理Network【树链剖分+树套树+二分 线段树套Treap】
  2. Java基础-自增自减运算符练习题
  3. 比较简单的解决键盘遮挡文本框的简单方法
  4. Guava学习笔记(1)--安全地使用null(Using and avoiding null)
  5. python全栈开发 * 04 * 180604
  6. Python网路请求(GET示例)
  7. Centos7 wordpress4.8.2
  8. 基于TCP/UDP的socket编程
  9. 在Windows Phone中使用HTML编程
  10. sqlserver不太常见的,可能常见但又疑问的tsql语句