首页 > 其他 > 详细

TYVJ 1038忠诚 ST 求区间最值

时间:2015-03-20 01:10:32      阅读:363      评论:0      收藏:0      [点我收藏+]

  已经不搞ACM了,就是最近随便做点题,就在这里存个代码

  

  

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 const int maxn = 100005;
 5 int a[maxn][20];
 6 int x[maxn];
 7 void init(int n)
 8 {
 9     for(int i = 1;i<=n;++i)a[i][0] = x[i];
10     int s = 1,r = 0;
11     while(s*2<n)s*=2,r++;
12     for(int i = 1;i<=r;++i)
13     {
14         int len = (1<<i)-1;
15         for(int j = 1;j+len<=n;++j)
16             a[j][i] = min(a[j][i-1],a[j+(len+1)/2][i-1]);
17     }
18 
19 }
20 int query(int l,int r)
21 {
22     int len = 1;
23     int k = 0;
24     while(len*2<r-l+1)k++,len*=2;
25     return min(a[l][k],a[r-len+1][k]);
26 }
27 int main()
28 {
29 //    freopen("in.txt","r",stdin);
30     int n,m;
31     while(~scanf("%d%d",&m,&n))
32     {
33         for(int i = 1;i<=m;++i)scanf("%d",&x[i]);
34         init(m);
35         int first = 1;
36         for(int i = 1;i<=n;++i)
37         {
38             int l,r;
39             scanf("%d%d",&l,&r);
40             if(first){first = 0;printf("%d",query(l,r));continue;}
41             printf(" %d",query(l,r));
42         }
43         puts("");
44     }
45     return 0;
46 }

 

TYVJ 1038忠诚 ST 求区间最值

原文:http://www.cnblogs.com/GJKACAC/p/4352278.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!