SDUT OJ 效率至上(线段树)
效率至上
Time Limit: 5000 ms Memory Limit: 65536 KiB
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;
}
SDUT OJ 效率至上(线段树)的更多相关文章
- Libre OJ 2255 (线段树优化建图+Tarjan缩点+DP)
题面 传送门 分析 主体思路:若x能引爆y,从x向y连一条有向边,最后的答案就是从x出发能够到达的点的个数 首先我们发现一个炸弹可以波及到的范围一定是坐标轴上的一段连续区间 我们可以用二分查找求出炸弹 ...
- 洛谷OJ U552 守墓人 线段树模板题
题目描述 Description 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然... ...
- SDUT OJ 2892 A (字典树问题-输出出现次数最多的字符串的出现次数,60ms卡时间,指针+最后运行完释放内存)
A Time Limit: 60ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给出n(1<= n && n <= 2*10^6)个字 ...
- 【csu oj 1542】线段树
题目大意:给定一个合法的括号序列(只包含'(',')'),有q次操作,对每次操作改变一个位置的括号,求最左端的位置,使得改变这个位置上的括号以后,新序列合法(完全配对). 思路:对于合法的括号序列,如 ...
- hiho_1078_线段树区间修改
题目 给定一组数,要求进行若干次操作,这些操作可以分为两种类型: (1) CMD 1 beg end value 将数组中下标在[beg, end] 区间内数字都变为value (2) CMD 2 b ...
- 线段树+RMQ问题第二弹
线段树+RMQ问题第二弹 上篇文章讲到了基于Sparse Table 解决 RMQ 问题,不知道大家还有没有印象,今天我们会从线段树的方法对 RMQ 问题再一次讨论. 正式介绍今天解决 RMQ 问题的 ...
- 【数据结构】线段树(Segment Tree)
假设我们现在拿到了一个非常大的数组,对于这个数组里面的数字要反复不断地做两个操作. 1.(query)随机在这个数组中选一个区间,求出这个区间所有数的和. 2.(update)不断地随机修改这个数组中 ...
- SDUT OJ 数组计算机(线段树)
学长推荐了这个博客详细的介绍了线段树的建立.查找.更新: 数组计算机 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Prob ...
- [SCOI2014]方伯伯的OJ(线段树)
方伯伯正在做他的Oj.现在他在处理Oj上的用户排名问题.Oj上注册了n个用户,编号为1-n“,一开始他们按照编号排名. 方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和编号: 1.操作格式为 ...
随机推荐
- [原创]Java使用反射及自定义注解实现对象差异性比较
Java项目C中 有一处逻辑,对于资源数据(类型为ResourceItem,拥有int/double/boolean/String类型数十个字段),需要比对资源数据每次变更的差异,并描述出变更情况.并 ...
- FFmpeg新版本(2016年10月份以后) 支持硬件解码
FFmpeg provides a subsystem for hardware acceleration. Hardware acceleration allows to use specific ...
- CSS秘密花园:多边框
今天在查询CSS3动画相关资料时偶然发现这个,感觉有时还是挺方便的.原文链接:http://www.w3cplus.com/css3/css-secrets/multiple-borders.html ...
- flask+jsonp跨域前后台交互(接口初体验)
1 # -*- coding: utf-8 -*- 2 from flask import Flask, jsonify 3 import psutil, time,json 4 5 app = Fl ...
- Django模板语言之组合搜索
url.py from django.conf.urls import url from django.contrib import admin from app01 import views url ...
- linux tcpdump
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- CodeForces - 721E
题目大意 现有一个长为 L的数轴,你要从0走到 L 给出n个互不相交的可行域. 你要选择长度为p的段,要求每一个段都要在可行域内. 选完一段之后下一段要么和其相接,要么和其间距至少为t,求问最多能选择 ...
- HUSTSE2017级5班3组小组JIRA软件使用体验看法汇总--未订正版
小组JIRA软件使用体验看法汇总 小黄 JIRA还是比较方便的,在项目组合管理阶段,可以让团队同时按时发布,也可以让计划变得更容易和快捷,可以跟踪团队的重要计划,清楚的了解项目的进度. 看了JIRA的 ...
- WordPaster2-正式包布署说明
1.1. 多平台布署说明 提供信息如下: 1.多平台控件包(根据购买版本提供) 2.控件信息 3.配置方法 WordPaster(x86)Clsid信息 ClsidParser F4B7C0FD- ...
- (转)基于 WPF + Modern UI 的 公司OA小助手 开发总结
原文地址:http://www.cnblogs.com/rainlam163/p/3365181.html 前言: 距离上一篇博客,整整一个月的时间了.人不能懒下来,必须有个阶段性的总结,算是对我这个 ...