hdu6098[RMQ+筛法] 2017多校6
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu6098[RMQ+筛法] 2017多校6相关的知识,希望对你有一定的参考价值。
/*hdu6098[RMQ+筛法] 2017多校6*/ #include <bits/stdc++.h> using namespace std; int T, n, st[100005][20], len[100005], a[100005]; void st_init() { len[0] = -1; for (int i = 1; i <= n; i++) { st[i][0] = a[i]; len[i] = (i & (i - 1)) == 0 ? len[i - 1] + 1 : len[i - 1]; } for (int j = 1; j <= len[n]; j++) { for (int i = 1; i + (1 << j) - 1 <= n; i++) { st[i][j] = max(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]); } } } int query(int l, int r) { int k = len[r - l + 1]; return max(st[l][k], st[r - (1 << k) + 1][k]); } int main() { scanf("%d", &T); while (T--) { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } st_init(); for (int i = 2; i <= n; i++) { int ans = 0; for (int j = 0; j < n; j += i) { //cout<<"["<<j+1<<", "<<min(n, j + i - 1)<<"]\n"; ans = max(query(j + 1, min(n, j + i - 1)), ans); } if(i>2) printf(" "); printf("%d", ans); } puts(""); } return 0; }
以上是关于hdu6098[RMQ+筛法] 2017多校6的主要内容,如果未能解决你的问题,请参考以下文章
HDU 5289 Assignment(多校2015 RMQ 单调(双端)队列)
杭电2018多校第一场(2018 Multi-University Training Contest 1) 1008.RMQ Similar Sequence (HDU6305) -笛卡尔树+数学期望