58 字
1 分钟

P2880 做题笔记

2024-10-16
浏览量 加载中...

萌新不会线段树于是写了自己改的树状数组,跑得还挺快。

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10,inf=2e9;
int n,q,i,l,r,T_min[N],T_max[N],a[N];
int lowbit(int x){return x&(-x);}
void Add(int p,int v){while(p<=n)T_min[p]=min(T_min[p],v),T_max[p]=max(T_max[p],v),p+=lowbit(p);}
int Query_min(int l,int r){return (l<r?(l<r-lowbit(r)?min(T_min[r],Query_min(l,r-lowbit(r))):min(a[r],Query_min(l,r-1))):a[l]);}
int Query_max(int l,int r){return (l<r?(l<r-lowbit(r)?max(T_max[r],Query_max(l,r-lowbit(r))):max(a[r],Query_max(l,r-1))):a[l]);}
int main(){
cin>>n>>q;
for(i=0;i<N;i++)T_min[i]=inf,T_max[i]=-inf;
for(i=1;i<=n;i++)cin>>a[i],Add(i,a[i]);
while(q--)cin>>l>>r,cout<<Query_max(l,r)-Query_min(l,r)<<'\n';
}

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
P2880 做题笔记
https://blog.walterfang.site/posts/note-p2880/
作者
Walter_Fang
发布于
2024-10-16
许可协议
CC BY-NC-SA 4.0
最后更新于 2024-10-16,距今已过 448 天

部分内容可能已过时

评论区

目录