首页 > 代码库 > 【hihoCoder第十六周】RMQ-ST算法
【hihoCoder第十六周】RMQ-ST算法
RMQ的大裸题。没什么意思。开始数组开小了,RE了一次。下面放代码。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 vector<int> A; 5 int dp[1000005][20]; 6 7 void RMQ_init () { 8 int n = A.size(); 9 for (int i = 0; i < n; ++ i) {10 dp[i][0] = A[i];11 }12 for (int j = 1; (1 << j) <= n; ++ j) {13 for (int i = 0; i + (1 << j) - 1 < n; ++ i) {14 dp[i][j] = min(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);15 }16 }17 }18 19 int RMQ (int L, int R) {20 int k = 0;21 while ((1 << (k + 1)) <= R - L + 1) ++ k;22 return min(dp[L][k], dp[R - (1 << k) + 1][k]);23 }24 25 int main () {26 int n;27 while (~scanf ("%d", &n)) {28 int x, op_n;29 for (int i = 0 ; i < n; ++ i) {30 scanf ("%d", &x);31 A.push_back(x);32 }33 /*34 for (int i = 0; i < A.size() - 1; ++ i) {35 cout << A[i] << endl;36 }37 */38 RMQ_init ();39 int a, b;40 scanf ("%d", &op_n);41 for (int i = 0; i < op_n; ++ i) {42 scanf ("%d%d", &a, &b);43 printf ("%d\n", RMQ(a - 1, b - 1));44 }45 }46 return 0;47 }
【hihoCoder第十六周】RMQ-ST算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。