嗷嗷嗷!!!
太难过了。
本来以为是线段树的建树问题,原来用O(n*log n)超时。
然后用O(n)的写法建树。还是超时。
突然发现是不是cin 和 cout 的问题。
于是改成 scanf 和 printf 。AC了。
花费时间前后对比。
然后改成 scanf printf 以后
嗷嗷嗷!!!这尼玛以后老老实实用 scanf printf。。
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define INF 1000000001
using namespace std;
int ql,qr,a[100001],minv[10000001];
int query(int l,int r,int o)
{
int m=(l+r)/2,ans=INF;
if(ql<=l&&qr>=r)return minv[o];
if(ql<=m)ans=min(ans,query(l,m,o*2));
if(qr>m)ans=min(ans,query(m+1,r,o*2+1));
return ans;
}
int update(int l,int r,int o)
{
int m=(l+r)/2;
if(l<r)
{
minv[o]=min(update(l,m,o*2),update(m+1,r,o*2+1));
}
else
minv[o]=a[m];
return minv[o];
}
int main()
{
int n,t;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
update(0,n-1,1);
scanf("%d",&t);
int l,r;
while(t--)
{
scanf("%d%d",&ql,&qr);
ql--,qr--;
printf("%d\n",query(0,n-1,1));
}
}
}