1 条题解
-
0
#include<bits/stdc++.h> using namespace std; #define ll long long struct node { int l,r; int maxn,minn; }tree[400010]; void build(int i,int l,int r) { tree[i].l=l;tree[i].r=r;tree[i].maxn=0;tree[i].minn=0x3f3f3f3f; if(l==r) { cin>>tree[i].minn; tree[i].maxn=tree[i].minn; return ; } int mid=(l+r)/2; build(i*2,l,mid); build(i*2+1,mid+1,r); tree[i].maxn=max(tree[i*2].maxn,tree[i*2+1].maxn); tree[i].minn=min(tree[i*2].minn,tree[i*2+1].minn); } void search(int i,int l,int r,int &minn,int &maxn) { if(tree[i].l>=l&&tree[i].r<=r) { minn=min(minn,tree[i].minn); maxn=max(maxn,tree[i].maxn); return ; } if(tree[i*2].r>=l) search(i*2,l,r,minn,maxn); if(tree[i*2+1].l<=r) search(i*2+1,l,r,minn,maxn); } int main() { ios::sync_with_stdio(false); int n,m,a,b,maxn,minn; while(cin>>n>>m) { build(1,1,n); while(m--) { cin>>a>>b; maxn=0,minn=0x3f3f3f3f; search(1,a,b,minn,maxn); cout<<maxn-minn<<endl; } } return 0; }
- 1
信息
- ID
- 1699
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 5
- 已通过
- 4
- 上传者