嗷嗷嗷!!!
太难过了。
本来以为是线段树的建树问题,原来用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)); } } }
九度OJ 1544 数字序列区间最小值,布布扣,bubuko.com
原文:http://blog.csdn.net/dongshimou/article/details/20796311