bzoj 2006 分类: bzoj 2015-05-31 17:18 29人阅读 评论(0) 收藏
2015-05-31 17:18
225 查看
http://blog.csdn.net/orpinex/article/details/7012836 太神了~!
#include<cstdio> #include<cstdlib> #include<ctime> #include<cmath> #include<cstring> #include<map> #include<string> #include<stack> #include<queue> #include<utility> #include<iostream> #include<algorithm> const int MAXN = 500005, logN = 20; struct HeapNode { int st,ed,l,r; long long v; HeapNode(int st=0,int ed=0,int l=0,int r=0,long long v=0):st(st),ed(ed),l(l),r(r),v(v){} }; bool operator < (const HeapNode &a,const HeapNode &b){return a.v < b.v;} std::priority_queue<HeapNode> heap; int n, k, L, R, seg[MAXN]; long long sum[MAXN]; long long st[MAXN][logN]; int opt[MAXN][logN]; long long ans = 0; void PreWork() { for(int i = 1; i <= n; i++) sum[i] = sum[i-1] + seg[i], st[i][0] = sum[i], opt[i][0] = i; for(int i = 1; i < logN; i++) { int lmt = n - (1<<i) + 1; for(int j = 1; j <= lmt; j++) { int t = j + (1<<(i-1)); if(st[j][i-1] > st[t][i-1]) st[j][i] = st[j][i-1], opt[j][i] = opt[j][i-1]; else st[j][i] = st[t][i-1], opt[j][i] = opt[t][i-1]; } } } int Ask(int a,int b) { int len = b - a + 1, t = 0; while((1<<(t+1)) <= len) t++; return (st[a][t] > st[b-(1<<t)+1][t])?opt[a][t]:opt[b-(1<<t)+1][t]; } void Insert(int st,int ll,int rr) { int t = Ask(ll,rr); heap.push(HeapNode(st,t,ll,rr,sum[t]-sum[st-1])); } void Build() { for(int i = 1; i + L - 1<= n; i++) Insert(i,i+L-1,std::min(i+R-1,n)); } void Solve() { for(int tp = 1; tp <= k; tp++) { HeapNode max = heap.top(); heap.pop(); ans += max.v; if(max.l < max.ed) Insert(max.st,max.l,max.ed-1); if(max.ed < max.r) Insert(max.st,max.ed+1,max.r); } } int main() { #ifndef ONLINE_JUDGE freopen("bzoj2006.in","r",stdin); freopen("bzoj2006.out","w",stdout); #endif scanf("%d%d%d%d",&n,&k,&L,&R); for(int i = 1; i <= n; i++) scanf("%d",&seg[i]); PreWork(); Build(); Solve(); printf("%lld",ans); #ifndef ONLINE_JUDGE fclose(stdin); fclose(stdout); #endif return 0; }
相关文章推荐
- Skype for Business Server 2015-04-前端服务器-8-验证拓朴
- J2EE中的JNDI
- 嵌入式初学者学习嵌入式必看必看书籍列表
- What does '>/dev/null 2>&1' mean in this article of crontab basics
- poj1065 wooden sticks
- sgu243:Broken Chessboard(搜索+优化)
- hiho一下 第四十八周
- uml精粹——8.部署图 & 9.用例
- 如何不通过maven或者ant将项目打包成可执行的Jar包
- Freemarker-数字默认格式化问题
- 连载《一个程序猿的生命周期》-19.工作7年,对做技术的一点感悟和理解
- 数组转变成键值一维数组
- 通讯录(C语言、文件保存)
- poj 1700 Crossing River 【贪心】
- eclipse自动代码提示
- vim自动补全插件YouCompleteMe的安装及配置
- 周末闲着无聊分享一个自己写的带呼吸效果的android水波纹自定义view
- 数据库逆向框架代码生成工具:MyBatis Generator的使用
- HDU 2022 海选女主角
- Spring2.5学习2.4_Spring如何装配各种集合类的属性