Codeforces 1304F2 Animal Observation (hard version) 代码(dp滑动窗口线段树区间更新优化)
https://codeforces.com/contest/1304/problem/F2
#include<bits/stdc++.h>
using namespace std;
const int maxn = 4e4+;
int dp[][maxn];
int val[][maxn];
int sum[][maxn];
int n,m,k;
struct node{
int l,r;
int Max,lz;
}seg_t[maxn*];
void build(int l,int r,int p){
seg_t[p].l = l,seg_t[p].r = r;
if(l == r) {
seg_t[p].Max = ;return ;
}
int mid = (l+r)>>;
build(l,mid,p*);
build(mid+,r,p*+);
seg_t[p].Max = max(seg_t[p*].Max ,seg_t[p*+].Max );
}
void pushdown(int k){
seg_t[k*].lz +=seg_t[k].lz ;
seg_t[k*+].lz +=seg_t[k].lz ;
seg_t[k*].Max +=seg_t[k].lz ;
seg_t[k*+].Max +=seg_t[k].lz ;
seg_t[k].lz = ;
}
void upd(int L,int R,int p,int v){
if(seg_t[p].l == L && seg_t[p].r == R){
seg_t[p].lz +=v;
seg_t[p].Max +=v;
return;
}
if(seg_t[p].lz ) pushdown(p);
int mid = (seg_t[p].l + seg_t[p].r )>>;
if(R<=mid) upd(L,R,p*,v);
else if(L>mid) upd(L,R,p*+,v);
else{
upd(L,mid,p*,v);
upd(mid+,R,p*+,v);
}
seg_t[p].Max = max(seg_t[p*].Max ,seg_t[p*+].Max );
}
int query(int p,int L,int R){
if(seg_t[p].l == L && seg_t[p].r == R) return seg_t[p].Max ;
if(seg_t[p].lz ) pushdown(p);
int mid = (seg_t[p].l +seg_t[p].r)>>;
if(R<=mid) return query(p*,L,R);
else if(L>mid) return query(p*+,L,R);
else return max(query(p*,L,mid),query(p*+,mid+,R));
}
int main(){
cin>>n>>m>>k;
for(int i = ;i<=n;i++){
for(int j = ;j<=m;j++) {
cin>>val[i][j];
sum[i][j] = sum[i][j-] + val[i][j];
}
}
for(int i = ;i<=m-k+;i++){
dp[][i] = sum[][i+k-] - sum[][i-]+sum[][i+k-]-sum[][i-];
}
for(int i = ;i<=n;i++){
memset(seg_t,,sizeof(seg_t));
build(,*m,);
for(int j = ;j<=m;j++) upd(j,j,,dp[i-][j]);
for(int j = ;j<=k;j++) upd(,j,,-val[i][j]);
for(int j = ;j<=m-k+;j++){
dp[i][j] = max(dp[i][j],query(,,m)+sum[i][j+k-]-sum[i][j-]+sum[i+][j+k-]-sum[i+][j-]);
upd(max(,j-k+),j,,val[i][j]);
upd(j+,j+k,,-val[i][j+k]);
}
}
int ans = ;
for(int i = ;i<=m;i++) ans = max(ans,dp[n][i]);
cout<<ans;
return ;
}
Codeforces 1304F2 Animal Observation (hard version) 代码(dp滑动窗口线段树区间更新优化)的更多相关文章
- 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP
1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP 题意 用摄像机观察动物,有两个摄像机,一个可以放在奇数天,一个可以放在偶数天.摄像机在 ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸
D. The Child and Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...
- codeforces 482B. Interesting Array【线段树区间更新】
题目:codeforces 482B. Interesting Array 题意:给你一个值n和m中操作,每种操作就是三个数 l ,r,val. 就是区间l---r上的与的值为val,最后问你原来的数 ...
- 线段树区间合并优化dp——cf1197E(好)
线段树优化dp的常见套路题,就是先按某个参数排序,然后按这个下标建立线段树,再去优化dp 本题由于要维护两个数据:最小值和对应的方案数,所以用线段树区间合并 /* dp[i]表示第i个套娃作为最内层的 ...
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】
黑白图像直方图 发布时间: 2017年7月9日 18:30 最后更新: 2017年7月10日 21:08 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...
- ZOJ 3632 Watermelon Full of Water (线段树 区间更新 + dp)
题目大意: 让每天都能吃到西瓜. 最少须要花多少钱. 思路分析: dp[pos] 就表示 要让 前i天每天都有西瓜吃.最少须要花多少钱. 那么假设你买这个西瓜的话. 那么这个西瓜能吃的持续时间都要更 ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间求和+点修改+区间取模
D. The Child and Sequence At the children's day, the child came to Picks's house, and messed his h ...
- Codeforces 719E [斐波那契区间操作][矩阵快速幂][线段树区间更新]
/* 题意:给定一个长度为n的序列a. 两种操作: 1.给定区间l r 加上某个数x. 2.查询区间l r sigma(fib(ai)) fib代表斐波那契数列. 思路: 1.矩阵操作,由矩阵快速幂求 ...
- Codeforces 482B Interesting Array(线段树区间更新)
题目链接 Interesting Array 区间更新.然后对于每一个约数重新求一遍区间的&值,不符合就跳出. #include <bits/stdc++.h> using nam ...
随机推荐
- postman简单接口测试
Postman简单接口测试 1. get请求: a. 选择get请求时,地址栏输入地址,如果需要添加参数,可以直接在地址栏加?后面写参数,也可以在点击params添加参数 b. 在headers中添加 ...
- k8s系列---故障
kubectl get namespace prom Terminating 45h namespace 出现Terminating 状态,一直删不掉 解决: 1:导出namespace的json文件 ...
- Vue路由(vue-router)
一.介绍 1.vue-router安装 官方文档:https://router.vuejs.org/zh/installation.html下载地址:https://unpkg.com/vue-rou ...
- oracle系列练习题
刚学习Oracle,老师给我们布置了一些题目来练习. 题目: 创建四个表,并录入数据 1.student表 CREATE TABLE STUDENT (SNO VARCHAR(3) NOT NULL, ...
- css实现表单label文字两端对齐
如图,在我们写页面的时候,经常遇到这种的情况,而需求是想让label文字两端对齐,我们来看看如何用css解决 /**css代码**/ ul li{ list-style: none; } .info- ...
- bootstrap-daterangepicker
1,依赖关系 使用之前需要引用bootstrap.css daterangpicker.css jquery.js boostrap.js moment.js daterangpi ...
- codewars--js--Number of trailing zeros of N!
问题描述: Write a program that will calculate the number of trailing zeros in a factorial of a given num ...
- go实现java虚拟机01
前段时间看了一本书,说的是用go语言实现java虚拟机,很有意思,于是就花了一段时间学习了一下go语言,虽然对go的底层理解不是很深,但是写代码还是可以的,就当做个读书笔记吧! 链接在这里,另外还有一 ...
- 《Git 从入门到体系》- 写给自己的话
我听过的对我很有冲击力的观点是:知识不成体系就是垃圾.这个观点不一定对,但是却是给我的冲击很大. 我记得以前在咖啡馆和一个博士医生聊天,他提出了这个观点:知识不成体系就是垃圾.听了这个观点我很想反驳他 ...
- vue中允许你继续使用swiper的组件 vue-awesome-swiper---切图网
swiper是一个在切图中好用到不行的图片轮播插件,包括3d轮播.h5滑屏等复杂应用都不在话下,到了vue项目一切逻辑完全颠覆了,没有获取dom的概念,还好有 vue-awesome-swiper组件 ...