1 条题解

  • 0
    @ 2023-10-5 20:40:27
    #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
    上传者