日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Uva 11235

發布時間:2025/3/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Uva 11235 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 #include<stdio.h> 2 #include<math.h> 3 const int N = 100010;//區間最大長度 4 const int M = 32; 5 int d[N][M];//表示從i開始長度為2^j的一段元素中的最小值 6 int A[N];//元素 7 int n; //元素從1到n編號 8 int max(int a, int b) { 9 return a > b ? a : b; 10 } 11 12 int RMQ_init() { 13 for(int i = 1; i <= n; ++i) d[i][0] = A[i]; 14 for(int j = 1; (1 << j) <= n; ++j) 15 for(int i = 1; i <= n + 1 - (1 << j); ++i) 16 d[i][j] = max(d[i][j - 1], d[i + (1 << (j - 1))][j - 1]); 17 } 18 19 int RMQ_query(int l, int r) { 20 int k = 0; 21 while(1 << (k + 1) <= r - l + 1) ++k; 22 return max(d[l][k], d[r - (1 << k) + 1][k]); 23 } 24 25 int left[N], right[N], num[N], a[N]; 26 int main() { 27 int m, q, l, r; 28 while(scanf("%d", &m), m) { 29 scanf("%d", &q); 30 n = 0; 31 int count = 1; 32 for(int i = 1; i <= m; ++i) { 33 scanf("%d", &a[i]); 34 } 35 a[m + 1] = a[m] + 1; 36 for(int i = 1; i <= m; ++i) { 37 if(a[i] != a[i + 1]) { 38 A[++n] = count; 39 for(int j = i - count + 1; j <= i; ++j) { 40 left[j] = i - count + 1; 41 right[j] = i; 42 num[j] = n; 43 } 44 count = 1; 45 } 46 else count++; 47 } 48 RMQ_init(); 49 int ql, qr; 50 while(q--) { 51 int ans; 52 scanf("%d%d", &ql, &qr); 53 if(num[ql] == num[qr]) ans = qr - ql + 1; 54 else { 55 ans = max(right[ql] - ql + 1, qr - left[qr] + 1); 56 if(num[qr] - num[ql] > 1) ans = max(ans, RMQ_query(num[ql] + 1, num[qr] - 1)); 57 } 58 printf("%d\n", ans); 59 } 60 } 61 return 0; 62 }

?

轉載于:https://www.cnblogs.com/startgo/archive/2013/02/01/2889631.html

總結

以上是生活随笔為你收集整理的Uva 11235的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。