标签:
已经不搞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 }
标签:
原文地址:http://www.cnblogs.com/GJKACAC/p/4352278.html