题目链接:
http://hihocoder.com/problemset/problem/1068
我的代码:
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 5 using namespace std; 6 7 #define MAXN 1000005 8 9 int w[MAXN]; 10 11 struct segNode 12 { 13 int left, right, minw; 14 }; 15 16 struct segTree 17 { 18 segNode t[4*MAXN]; 19 void build(int i, int l, int r) 20 { 21 t[i].left = l; 22 t[i].right = r; 23 if(l==r) t[i].minw = w[l]; 24 else 25 { 26 int m = (l+r)/2; 27 build(2*i, l, m); 28 build(2*i+1, m+1, r); 29 t[i].minw = min(t[2*i].minw, t[2*i+1].minw); 30 } 31 } 32 int query(int i, int l, int r) 33 { 34 if(t[i].left==l&&t[i].right==r) return t[i].minw; 35 int m = (t[i].left+t[i].right)/2; 36 if(r<=m) return query(2*i, l, r); 37 if(l>m) return query(2*i+1, l, r); 38 return min(query(2*i, l, m), query(2*i+1, m+1, r)); 39 } 40 }segtree; 41 42 int main() 43 { 44 int n, q; 45 //while(cin>>n) 46 while(scanf("%d", &n)!=EOF) 47 { 48 for(int i=1; i<=n; ++i) 49 //cin>>w[i]; 50 scanf("%d", &w[i]); 51 segtree.build(1, 1, n); 52 //cin>>q; 53 scanf("%d", &q); 54 while(q--) 55 { 56 int l, r; 57 //cin>>l>>r; 58 scanf("%d%d", &l, &r); 59 //cout<<segtree.query(1, l, r)<<endl; 60 printf("%d\n", segtree.query(1, l, r)); 61 } 62 } 63 return 0; 64 }
需要注意的是:涉及到频繁的输入输出,最好用C语言的标准输入输出而不要用C++的流式输入输出,否则提交很可能会超时。(我一开始用cin, cout就超时了T^T)。
时间: 2024-12-25 05:04:09