维护区间最值的模板题。

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. 前端-关于CORS跨域的解决方案,面向服务端

    最近自己在写后台管理系统的时候,并没有采用jsp.freemaker.叶子等模板技术,而是由后端提供数据api,前端通过AJAX和JQuery来动态操作页面上的一些div.table元素,从而实现报表 ...

  2. 【定时功能】消息的定时发送-基于RocketMQ

    一.功能介绍 要实现一个消息的定时发送功能,也就是让消息可以在某一天某一个时间具体节点进行发送.而我们公司的业务场景是类似短信的业务,而且数量不小,用户会进行号码.消息内容.定时发送时间等信息的提交. ...

  3. Python3的原生协程(Async/Await)和Tornado异步非阻塞

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_113 我们知道在程序在执行 IO 密集型任务的时候,程序会因为等待 IO 而阻塞,而协程作为一种用户态的轻量级线程,可以帮我们解决 ...

  4. powershell和cmd对比

    前言 计算机啊这东西,本质上是硬件和软件的综合体.如果只有硬件没有软件的话,这也是台辣鸡而已.而计算机软件中最靠近硬件的一层,就是操作系统层. 操作系统有很多种,比如Unix/Linux/Mac OS ...

  5. 3.26省选模拟+NOI-ONLINE

    今日趣闻: 这三个人都是同机房的,卡最优解(大常数选手不参与)....以至于最优解第一页都是我们机房的(有图为证,共三人) $NOI\ online$ $T1$ 首先模拟一遍记录这个点当前单调栈前面位 ...

  6. 用固态U盘让你的办公环境随身移动

    有些人因为家中的电脑设备没有办公环境,或者是软件太多装起来麻烦,以及环境不同步等原因上下班总是背着电脑,其实大可不必,只要将系统装进U盘,就可以让你的办公环境随身移动.在公司时启动U盘系统工作,下班后 ...

  7. 源码解析springbatch的job是如何运行的?

    202208-源码解析springbatch的job是如何运行的? 注,本文中的demo代码节选于图书<Spring Batch批处理框架>的配套源代码,并做并适配springboot升级 ...

  8. Luogu2343 宝石管理系统(平衡树)

    平衡树维护总第K大:插入 #include <iostream> #include <cstdio> #include <cstring> #include < ...

  9. 开源云真机平台-Sonic应用实践

    前言 Sonic是一款开源.支持分布式部署.在线自动化测试的私有云真机平台.偶然接触到这个平台是源于虫师的一篇公众号文章<基于Linux 部署 Sonic>,于是结合文章内容和官网尝试搭建 ...

  10. ABC216H - Random Robots(容斥,状压DP)

    题面 有 K K K 个机器人初始分别位于数轴上 x 1 , x 2 , . . . , x K x_1,x_2,...,x_{K} x1​,x2​,...,xK​ 的整点位置. 接下来会经历 N N ...