D. R2D2 and Droid Army(二分加多维线段树查询区间最大值)
2015-02-16 19:33
411 查看
简单线段树,直接上代码.
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <set> #include <map> #include <queue> #include <vector> #include <cstdlib> #include <algorithm> #define ls u << 1 #define rs u << 1 | 1 #define lson l, mid, u << 1 #define rson mid + 1, r, u << 1 | 1 #define INF 0x3f3f3f3f #define MAX 4 using namespace std; typedef long long ll; const int M = 1e5 + 100; const int mod = 2147483647; int sum[10][M << 2],n,m,k,res[10],ans[10]; void pushup(int u){ for(int i = 0; i < m; i++) sum[i][u] = max(sum[i][ls],sum[i][rs]); } void build(int l,int r,int u){ if(l == r){ for(int i = 0; i < m; i++) scanf("%d",&sum[i][u]); } else{ int mid = (l + r) >> 1; build(lson); build(rson); pushup(u); } } void query(int L,int R,int l,int r,int u){ if(L <= l && R >= r){ for(int i = 0; i < m; i++) res[i] = max(res[i],sum[i][u]); } else{ int mid = (l + r) >> 1; if(L <= mid) query(L,R,lson); if(R > mid) query(L,R,rson); } } bool solve(int len){ for(int l = 1; l <= n - len + 1; l++){ int r = l + len - 1,sum = 0; memset(res,-1,sizeof(res)); query(l,r,1,n,1); for(int i = 0; i < m; i++){ sum += res[i]; } if(sum <= k){ for(int i = 0; i < m; i++) ans[i] = res[i]; return true; } } return false; } int main(){ scanf("%d %d %d",&n,&m,&k); build(1,n,1); int l = 1,r = n; while(l <= r){ int mid = (l + r) >> 1; if(solve(mid)) l = mid + 1; else r = mid - 1; } for(int i = 0; i < m; i++){ if(i) putchar(' '); printf("%d",ans[i]); } puts(""); return 0; }
相关文章推荐
- 【Cf #291 B】R2D2 and Droid Army(二分,线段树)
- hdu-4614-Vases and Flowers(线段树,区间更新区间查询,lazy,二分)
- Codeforces #291 (Div. 2) D. R2D2 and Droid Army(RMQ+二分)
- R2D2 and Droid Army(多棵线段树)
- R2D2 and Droid Army(多棵线段树)
- Codeforces 514 D R2D2 and Droid Army(RMQ+二分)
- Codeforces 514D R2D2 and Droid Army【二分+RMQ】
- R2D2 and Droid Army - CodeForces 514 D 二分
- 文章标题 coderforces 514D : R2D2 and Droid Army (二分+RMQ预处理)
- Codeforces Round #291 (Div. 2)D. R2D2 and Droid Army (线段树+二分)
- cf291 div2 D. R2D2 and Droid Army 二分+RMQ
- CodeForces - 514D :R2D2 and Droid Army(二分、暴力)
- Codeforces Round #291 (Div. 2) D R2D2 and Droid Army(线段树+二分)
- 【CF 514D】 R2D2 and Droid Army (线段树、RMQ)
- 【打CF,学算法——四星级】CodeForces 514D R2D2 and Droid Army (RMQ+二分)
- Codeforces Round #291 (Div. 2)D.R2D2 and Droid Army——RMQ+二分
- D. R2D2 and Droid Army 线段树+二分 Codeforces Round #291 (Div. 2)
- vijos 1659 河蟹王国 线段树区间加、区间查询最大值
- Codeforces Round #291 (Div. 2)---D. R2D2 and Droid Army
- D. R2D2 and Droid Army(two pointers)