维护区间最值的模板题。

1.树状数组

 1 #include<bits/stdc++.h>
2 //树状数组做法
3 using namespace std;
4 const int N=5e4+10;
5 int m,ma[N],mi[N],n,c[N];
6
7 int lowbit(int x){
8 return x&(-x);
9 }
10
11 void ins(int x,int v){
12 while(x<=n){
13 ma[x]=max(ma[x],v);mi[x]=min(mi[x],v);
14 x+=lowbit(x);
15 }
16 }
17
18 int que(int L,int R){
19 int maxx=-1,minn=1e9;
20 while(L<=R){
21 for(;R-lowbit(R)>=L;R-=lowbit(R)) maxx=max(maxx,ma[R]),minn=min(minn,mi[R]);
22 maxx=max(c[R],maxx);minn=min(minn,c[R]);
23 R--;
24 }
25 return maxx-minn;
26 }
27
28 int main(){
29 memset(mi,0x3f,sizeof(mi));
30 memset(ma,0,sizeof(ma));
31 scanf("%d%d",&n,&m);
32 for(int i=1;i<=n;i++){
33 int x;scanf("%d",&x);
34 ins(i,x);
35 c[i]=x;
36 }
37 while(m--){
38 int a,b;
39 scanf("%d%d",&a,&b);
40 cout<<que(a,b)<<endl;
41 }
42 }

2.线段树

 1 #include<bits/stdc++.h>
2 //线段树做法
3 using namespace std;
4 const int N=5e4+10;
5 #define lson l,mid,pos<<1
6 #define rson mid+1,r,pos<<1|1
7 int maxx[N<<2],minn[N<<2],MAX,MIN;
8
9 void up(int pos){
10 maxx[pos]=max(maxx[pos<<1],maxx[pos<<1|1]);
11 minn[pos]=min(minn[pos<<1],minn[pos<<1|1]);
12 }
13
14 void build(int l,int r,int pos){
15 if(l==r){
16 int x;scanf("%d",&x);
17 maxx[pos]=minn[pos]=x;
18 return ;
19 }
20 int mid=(l+r)>>1;
21 build(lson);build(rson);
22 up(pos);
23 }
24
25 void query(int L,int R,int l,int r,int pos){
26 if(L<=l && R>=r){
27 MAX=max(MAX,maxx[pos]);
28 MIN=min(MIN,minn[pos]);
29 return ;
30 }
31 int mid=(l+r)>>1;
32 if(L<=mid) query(L,R,lson);
33 if(R>mid) query(L,R,rson);
34 }
35
36 int main(){
37 int n,m;
38 scanf("%d%d",&n,&m);
39 build(1,n,1);
40 while(m--){
41 MAX=0,MIN=1e9;
42 int a,b;scanf("%d%d",&a,&b);
43 query(a,b,1,n,1);
44 cout<<MAX-MIN<<endl;
45 }
46 return 0;
47 }

洛谷P2880 [USACO07JAN] Balanced Lineup G(树状数组/线段树)的更多相关文章

  1. 洛谷 P2880 [USACO07JAN]Balanced Lineup G (ST表模板)

    题意:给你一组数,询问\(q\)次,问所给区间内的最大值和最小值的差. 题解:经典RMQ问题,用st表维护两个数组分别记录最大值和最小值然后直接查询输出就好了 代码: int n,q; int a[N ...

  2. 洛谷P2414 阿狸的打字机 [NOI2011] AC自动机+树状数组/线段树

    正解:AC自动机+树状数组/线段树 解题报告: 传送门! 这道题,首先想到暴力思路还是不难的,首先看到y有那么多个,菜鸡如我还不怎么会可持久化之类的,那就直接排个序什么的然后按顺序做就好,这样听说有7 ...

  3. 树状数组 && 线段树应用 -- 求逆序数

    参考:算法学习(二)——树状数组求逆序数 .线段树或树状数组求逆序数(附例题) 应用树状数组 || 线段树求逆序数是一种很巧妙的技巧,这个技巧的关键在于如何把原来单纯的求区间和操作转换为 求小于等于a ...

  4. hdu1394(枚举/树状数组/线段树单点更新&区间求和)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给出一个循环数组,求其逆序对最少为多少: 思路:对于逆序对: 交换两个相邻数,逆序数 +1 ...

  5. hdu 1166:敌兵布阵(树状数组 / 线段树,入门练习题)

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

  6. hdu 5147 Sequence II【树状数组/线段树】

    Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...

  7. [洛谷P1198/BZOJ1012][JSOI2008] 最大数 - 树状数组/线段树?

    其实已经学了树状数组和线段树,然而懒得做题,所以至今没写多少博客 Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数 ...

  8. 【洛谷4396/BZOJ3236】[AHOI2013]作业(莫队+分块/树状数组/线段树)

    题目: 洛谷4396 BZOJ3236(权限) 这题似乎BZOJ上数据强一些? 分析: 这题真的是--一言难尽 发现题面里没说权值的范围,怕出锅就写了离散化.后来经过面向数据编程(以及膜神犇代码)知道 ...

  9. BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)

    题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...

随机推荐

  1. DQL基础查询和DQL条件查询

    DQL:查询表中的记录 1.语法 select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限 ...

  2. LyScript 获取上一条与下一条指令

    LyScript 插件默认并没有提供上一条与下一条汇编指令的获取功能,当然你可以使用LyScriptTools工具包直接调用内置命令得到,不过这种方式显然在效率上并不理想,我们需要在LyScript插 ...

  3. 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  4. 一文带你弄懂 CDN 技术的原理

    对于 CDN 这个东西,相信大家都有耳闻,感觉既陌生但又熟悉.最近深入了解了一下 CDN,这才发现原来 CDN 如此重要!今天就跟大家科普一下 CDN 是什么,以及为啥要有 CDN,最后再讲一下 CD ...

  5. 手把手教你定位线上MySQL慢查询问题,包教包会

    1. 慢查询日志的作用 慢查询日志默认不开启,建议手动开启,方便我们定位线上问题. 执行时间超过阈值的SQL会被写入到慢查询日志当中,这样可以帮助我们记录执行时间过长的SQL语句,定位线上慢SQL问题 ...

  6. 用JavaScript计算平年闰年

    var i = prompt("请输入你要查询的年份") if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){ conso ...

  7. java反射的初理解

    反射 获取类的方法: Class<?> aClass1 = Class.forName("TestDemo.refection.User");//通过类路径获取 Cla ...

  8. 在Go中如何正确重试请求

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/677 我们平时在开发中肯定避不开的一个问题是如何在不可靠的网络服务中 ...

  9. 它把RabbitMQ的复杂全屏蔽了,我朋友用它后被老板一夜提拔为.NET架构师

    本文技术源自外企,并已在多个世界500强大型项目开发中运用. 本文适合有初/中级.NET知识的同学阅读.(支持.NET/.NET Framework/.NET Core) RabbitMQ作为一款主流 ...

  10. openstack 创建虚拟机失败

    虚拟机创建失败    用户创建一台虚拟机,虚拟机使用4个网络平面,所以虚拟机选择了4个不同平面的网络,创建虚拟机一直在孵化的过程中,最后创建虚拟机失败. 失败后返回的报错日志 Build of ins ...