【51Nod】1174 区间中最大的数
2017-05-30 23:37
246 查看
题意
给出一个有N个数的序列,编号0 - N - 1。进行Q次查询,查询编号i至j的所有数中,最大的数是多少。例如: 1 7 6 3 1。i = 1, j = 3,对应的数为7 6 3,最大的数为7。(该问题也被称为RMQ问题)
解题思路
RMQ经典问题参考代码
#include <iostream> using namespace std; const int MAXN = 10010; int dp[MAXN][20]; int mm[MAXN]; void initRMQ(int n, int b[]) { mm[0] = -1; for (int i = 1; i <= n; i++) { mm[i] = ((i & (i - 1)) == 0) ? mm[i - 1] + 1 : mm[i - 1]; dp[i][0] = b[i]; } for (int j = 1; j <= mm ; j++) { for (int i = 1; i + (1 << j) - 1 <= n; i++) { dp[i][j] = max(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]); } } } int rmq(int x, int y) { int k = mm[y - x + 1]; return max(dp[x][k], dp[y - (1 << k) + 1][k]); } int main(int argc, const char * argv[]) { int N; cin >> N; int b[MAXN]; for (int i = 1; i <= N; i++) { cin >> b[i]; } initRMQ(N, b); int Q; cin >> Q; int 4000 left, right; for (int i = 0; i < Q; i++) { cin >> left >> right; cout << rmq(left + 1, right + 1) << '\n'; } return 0; }
相关文章推荐
- 51Nod 1174:区间中最大的数
- 51nod 1174 区间中最大的数
- 51Nod-1174-区间中最大的数
- 51nod 1174 区间中最大的数(线段树)
- 51nod 1174 区间中最大的数
- 51Nod-1174-区间中最大的数
- 51nod_1174 区间中最大的数(线段树模板)
- 51Nod-1174 区间中最大的数(RMQ)
- 51NOD 1174 区间中最大的数
- 51nod:1174 区间中最大的数(RMQ)
- 51nod 1174 区间中最大的数(线段树)
- 51nod 1174 区间中最大的数 (线段树+RMQ)
- 51Nod 1174 求区间最大的数 RMQ
- 51Nod 1174 区间中最大的数<线段树>
- 51nod 1174 区间中最大的数
- 51nod 1174区间中最大的数(线段树)
- 【51Nod】1174 - 区间中最大的数(RMQ)
- 51Nod 1174区间中最大的数
- 51nod 1174 区间中最大的数
- 51Nod-1174-区间中最大数