维护区间最值的模板题。

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. Dubbo源码(二) - SPI源码

    前情提要 假设你已经知道Dubbo SPI的使用方式,不知道的请出门左转: Dubbo源码(一) - SPI使用 Dubbo源码地址: apache/dubbo 本文使用版本:2.6.x 测试Demo ...

  2. CentOS 定时计划任务设置

    一.安装crontab服务并设置开机自启 yum install crontabs (centos默认就会带,一般不需要安装) systemctl enable crond (设为开机启动) syst ...

  3. 老子云携手福昕鲲鹏,首次实现3D OFD三维版式文档的重大突破

    你见过能动起来的文档吗? 这可不是动图,也不是视频,而是可以直接自由交互3D模型的3D OFD文档! OFD可能有人不熟悉,它其实是国产"PDF",3D OFD则突破了以往文字.图 ...

  4. React + Antd Menu组件实现菜单树

    准备好两个变量,一个用来保存平级菜单列表,一个用来保存遍历后的菜单树. 推荐后端返回平级菜单树,假如菜单比较多,可以直接结合find方法找到菜单,做搜索功能很省事. const [menuList, ...

  5. 使用Properties集合存储数据,遍历取出Properties集合中的数据和Properties集合中的方法store和load

    package com.yang.Test.PropertiesStudy; import java.io.FileWriter; import java.io.IOException; import ...

  6. md 中超链接的解析问题:解析`this.$set()`,`$`前要加空格或转义符 `\`

    在用 Editor.md 写文档时,插入超链接,发现一个奇怪的现象: 要想正确显示超链接,必须在 $ 前加空格或转义符 \

  7. Jetpack Compose学习(8)——State及remeber

    原文地址: Jetpack Compose学习(8)--State状态及remeber关键字 - Stars-One的杂货小窝 之前我们使用TextField,使用到了两个关键字remember和mu ...

  8. 在阿里云Centos7.6上面配置Mysql主从数据库(master/slave),实现读写分离

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_85 在之前的一篇文章中,阐述了如何在高并发高负载的场景下使用nginx做后台服务的负载均衡:在阿里云Centos上配置nginx+ ...

  9. Luogu3275 [SCOI2011]糖果 (差分约束)

    逆序建超级源快十倍还行 #include <cstdio> #include <iostream> #include <cstring> #include < ...

  10. Spring源码 16 IOC refresh方法11

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...