P1816 求助
  • 板块学术版
  • 楼主expnoi
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/2/9 00:13
  • 上次更新2023/11/5 03:31:09
查看原帖
P1816 求助
218205
expnoi楼主2021/2/9 00:13
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
const int maxn=1e5+5;
int n,m,l,r,a[maxn],Min[maxn<<2],t=1,ans[maxn];
inline void pushup(int id)
{
	Min[id]=min(Min[id<<1],Min[id<<1|1]);
}
inline void build(int id,int l,int r)
{
	if(l==r)
	{
		Min[id]=a[l];
		return;
	}
	int mid=(l+r)>>1;
	build(id<<1,l,mid);
	build(id<<1|1,mid+1,r);
	pushup(id); 
}
inline int query(int id,int l,int r,int x,int y)
{
	if(x<=l&&r<=y)
	{
		return Min[id];
	}
	int mid=(l+r)>>1,ans=0x7fffffff;
	if(x<=mid)
	{
		ans=min(ans,query(id<<1,l,mid,x,y));
	}
	if(y>mid)
	{
		ans=min(ans,query(id<<1|1,mid+1,r,x,y));
	}
	return ans;
}
int main()
{
	m=read();
	n=read();
	for(int i=1;i<=m;i++)
	{
		a[i]=read();
	}
	build(1,1,m);
	while(n--)
	{
		l=read();
		r=read();
		printf("%d",query(1,1,m,l,r));
		puts("");
	}
}
2021/2/9 00:13
加载中...