2 条题解

  • 0
    @ 2025-6-2 23:34:21

    rmq静态稀疏表:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    #define maxn 100005
    #define re register
    int n,m,l,r,f[maxn][22];
    
    int ask(int l,int r)
    {
    	int k=log2(r-l+1);
    	return min(f[l][k],f[r-(1<<k)+1][k]);
    }
    
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for(re int i=1;i<=n;i++) scanf("%d",&f[i][0]);
    	for(re int j=1;j<=20;j++)
    	{
    		for(int i=1;i<=n;i++)
    		{
    			if(i+(1<<j)-1<=n)
    			{
    				f[i][j]=min(f[i][j-1],f[i+(1<<j-1)][j-1]);
    			}
    		}
    	}
    	for(re int i=1;i<=m;i++)
    	{
    		scanf("%d%d",&l,&r);
    		printf("%d ",ask(l,r));
    	}
    	return 0;
    }
    
    • 0
      @ 2025-6-2 23:34:01

      线段树方法:

      #include <iostream>
      #include <cstdio>
      #include <cstring>
      #include <algorithm>
      #include <cmath>
      using namespace std;
      #define maxn 100005
      #define re register
      #define INF 0x7fffffff
      
      struct tree
      {
      	int l,r,Min=INF;
      }s[(maxn<<2)+5];
      
      int n,m,L,R,data[maxn];
      
      void update(int p)
      {
      	s[p].Min=min(s[p<<1].Min,s[p<<1|1].Min);
      }
      
      void build(int p,int l,int r)
      {
      	s[p].l=l;
      	s[p].r=r;
      	if(l==r)
      	{
      		s[p].Min=data[l];
      		return;
      	}
      	int mid=l+r>>1;
      	build(p<<1,l,mid);
      	build(p<<1|1,mid+1,r);
      	update(p); 
      }
      
      inline int ask(int p,int l,int r)
      {
      	if(l==s[p].l&&s[p].r==r) return s[p].Min; 
      	int mid=s[p].l+s[p].r>>1;
      	if(r<=mid) return ask(p<<1,l,r);
      	if(l>mid) return ask(p<<1|1,l,r);
      	return min(ask(p<<1,l,mid),ask(p<<1|1,mid+1,r));
      } 
      
      int main()
      {
      	scanf("%d%d",&n,&m);
      	for(re int i=1;i<=n;i++) scanf("%d",&data[i]);
      	build(1,1,n);
      	for(re int i=1;i<=m;i++)
      	{
      		scanf("%d%d",&L,&R);
      		printf("%d ",ask(1,L,R)); 
      	}
      	return ~~(0-0);
      }
      
      • 1

      信息

      ID
      1139
      时间
      1000ms
      内存
      256MiB
      难度
      9
      标签
      递交数
      12
      已通过
      4
      上传者