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 ...
随机推荐
- logstash 安装插件multiline
一.安装multiline 在使用elk 传输记录 java 日志时,如下 一个java的报错 在elk中会按每一行 产生多条记录,不方便查阅 这里修改配置文件 使用 multiline 插件 ...
- centos7 nginx 启动脚本
[root@localhost ~]# vim /lib/systemd/system/nginx.service [Unit] Description=nginx After=network.tar ...
- Springboot 自动装配置
Spring Boot 相对于传统的Spring引入了自动配置功能,简化了项目中繁琐的配置,让开发者利用起来更加的简便.快捷.比如内嵌的tomcat容器等,这些都属于Spring Boot自动配置的范 ...
- [RHEL8]安装Docker Problem: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io
系统环境 # cat /etc/redhat-release Red Hat Enterprise Linux release 8.0 (Ootpa) 安装依赖 # yum install -y yu ...
- Literature Review: Improving Image-Based Localization by Active Correspondence Search
Abstract Input: A query image Source: A point cloud reconstruction of a large scene (有一百多万3D点) Resul ...
- Android Studio 3.6 正式版终于发布了
Google 下载地址 百度云 下载地址 密码:epl9 如题,Android Studio 3.6 正式版终于发布了,值得兴奋呀,毕竟 3.5 大版本更新也已经差不多半年了,撒花撒花!这次更新又更新 ...
- 远程连接Linux下mysql报10061
最近接到一个新活,四台Linux服务器配置MySQL热机双备+IP隧道LVS集群服务,尽管好想使个眼神杀死老大,但特么心里是感激的.不多说一口气装了n个Ubuntu-server. 每次在虚拟机装完M ...
- Pandas常用功能
在使用Pandas之前,需要导入pandas库 import pandas as pd #pd作为pandas的别名 常用功能如下: 代码 功能1 .DataFrame() 创建一个DataFr ...
- 饿了么组件--table组件自定义渲染列,同时伴有v-for和v-if情况
如题,有一个需求,列数量不固定,在一定条件下,可能会(fixedColumn, A2, A3, A4)或(fixedColumn, B2, B3)情况,其中A2, A3, A4会同时出现,B2, B3 ...
- Java Lamada
Collection: ->stream:返回一个以 colleciotn 元素为数据源的数据流. -->map: 入参 Function 对象,将此流中的元素依次作用于传入的 Funct ...