维护区间最值的模板题。

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. firewall 命令简单操作

    Firewalld 是维护防火墙策略的守护程序的名称.使用 firewall-cmd 命令与防火墙配置进行交互, 使用区域概念对与系统交互的流量进行分段.网络接口分配给一个或多个区域,每个区域都包含允 ...

  2. 对象数组的foreach循环操作和集合容器

    ForEach标签可以循环数组,list,map集合 采用 foreach循环遍历 ,并每次循环允许执行一次回调函数 for (容器中元素类型 临时变量: 容器变量) { System.out.pri ...

  3. 如何让 JS 代码不可断点

    绕过断点 调试 JS 代码时,单步执行(F11)可跟踪所有操作.例如这段代码,每次调用 alert 时都会被断住: debugger alert(11) alert(22) alert(33) ale ...

  4. Python基础之数据类型和变量

    数据类型 ​ 计算机顾名思义就是可以做数学机器,可以处理各种数值,计算机还能处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据是需要定义不同的数据类型的,在Python中,能够直接处理的数据 ...

  5. Luogu1769 淘汰赛制_NOI导刊2010提高(01)(概率DP)

    第\(i\)次位置在\(pos_0 / 2^{i - 1}\) #include <iostream> #include <cstdio> #include <cstri ...

  6. MySQL 连接超时:报错SQLSTATE[HY000] [2002] Connection timed out

    在网上找了一堆,结果全部是错的 后来,我明白了其实是设置问题. 当你的代码部署到服务器里的时候,你的mysql 的host 值 应该为 127.0.0.1 而不是 你的服务器ip 不然就会报错. 其实 ...

  7. 如何开发一款基于 Vite+Vue3 的在线表格系统(上)

    今天,葡萄带你了解如何基于Vite+Vue3实现一套纯前端在线表格系统. 在正式开始项目介绍之前,首先咱们首先来介绍一下Vite和Vue3. Vue3 Vue是什么?大多前端开发者对这个词已毫不陌生了 ...

  8. 一文搞懂EMAS Serverless小程序开发|电子书免费下载

    >> 快来免费下载|电子书<五天玩转 EMAS Serverless> << 点击免费下载 <五天玩转 EMAS Serverless> EMAS Se ...

  9. WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)

    概述 本文描述WPF的拖放功能(Drag and Drop). 拖放功能涉及到两个功能,一个就是拖,一个是放.拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放.假设界面上有两个控件,一个Tre ...

  10. rh358 002 fact变量获取 ansible配置网络 service_facts

    通过ansible 获取网络信息 1.如何获取fact事实变量 方式1: ansible servera -m servera 方式2: 剧本 [root@workstation ansible]# ...