RMQ -- ST算法 Codeforces Round #291 (Div. 2) D. R2D2 and Droid Army
2015-02-26 09:15
417 查看
RMQ-ST算法: http://kmplayer.iteye.com/blog/575725
每一列用ST记录区间最大值,用两个指针扫描。
每一列用ST记录区间最大值,用两个指针扫描。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<iostream> #include<algorithm> #include<vector> #include<utility> #include<queue> #include<set> #include<map> #include<math.h> #include<string> using namespace std; #define inf 0x3f3f3f3f #pragma warning(disable:4996) #pragma comment(linker, "/STACK:102400000,102400000") #define ll long long const double eps = 1e-9; int p[100010][5]; int dp[100010][18][5]; int main() { int i, j, k, n, m, K; cin >> n >> m >> K; for (i = 0; i < n;i++) for (j = 0; j < m; j++) { scanf("%d",&p[i][j]); } for (k = 0; k < m; k++) { for (i = 0; i < n; i++) { dp[i][0][k] = p[i][k]; } } for (k = 0; k < m; k++) { for (j = 1; (1 << j) <= n; j++) { for (i = 0; i + (1 << j)-1 < n; i++) dp[i][j][k] = max(dp[i][j-1][k],dp[i+(1<<(j-1))][j-1][k]); } } int l = 0, r = 0; int mx = 0, tl=-1, tr=-1; while (1) { int t = log((r - l + 1)*1.0) / log(2.0); int sum = 0; for (k = 0; k < m; k++) { sum += max(dp[l][t][k],dp[r-(1<<t)+1][t][k]); } if (sum <= K) { if (r - l + 1>mx) { mx = r - l + 1; tl = l, tr = r; } if (r != n - 1) r++; else if (l != n - 1) l++; else break; } else { if (l != n - 1) l++; } if (r < l) r++; if (r == n - 1 && l == n - 1) break; } if (tl == -1) { for (i = 0; i < m;i++) if (i != m - 1) printf("0 "); else printf("0\n"); } else { int t = log((tr - tl + 1)*1.0) / log(2.0); for (k = 0; k < m; k++) { int h = max(dp[tl][t][k],dp[tr-(1<<t)+1][t][k]); if (k == m - 1) printf("%d\n",h); else printf("%d ",h); } } //system("pause"); }
相关文章推荐
- 【打CF,学算法——四星级】CodeForces 514D R2D2 and Droid Army (RMQ+二分)
- Codeforces Round #291 (Div. 2)-D. R2D2 and Droid Army(RMQ)
- Codeforces #291 (Div. 2) D. R2D2 and Droid Army(RMQ+二分)
- Codeforces Round #291 (Div. 2) D. R2D2 and Droid Army RMQ/单调队列/尺取法
- cf291 div2 D. R2D2 and Droid Army 二分+RMQ
- Codeforces Round #291 (Div. 2)D.R2D2 and Droid Army——RMQ+二分
- Codeforces 514D R2D2 and Droid Army【二分+RMQ】
- Codeforces 514D R2D2 and Droid Army RMQ问题
- Codeforces 514 D R2D2 and Droid Army(RMQ+二分)
- Codeforces Round #291 (Div. 2) D R2D2 and Droid Army(线段树+二分)
- 线段树+二分(Codeforces Round #291 (Div. 2)D. R2D2 and Droid Army)
- D. R2D2 and Droid Army 线段树+二分 Codeforces Round #291 (Div. 2)
- Codeforces Round #291 (Div. 2) D - R2D2 and Droid Army
- Codeforces Round #291 (Div. 2)D. R2D2 and Droid Army
- Codeforces Round #291 (Div. 2)---D. R2D2 and Droid Army
- Codeforces Round #291 (Div. 2)D. R2D2 and Droid Army (线段树+二分)
- 文章标题 coderforces 514D : R2D2 and Droid Army (二分+RMQ预处理)
- Codeforces 514D R2D2 and Droid Army RMQ问题
- 【CF 514D】 R2D2 and Droid Army (线段树、RMQ)
- R2D2 and Droid Army : CodeForces - 514D RMQ+单调性