降临(线段树优化dp)
降临
选定点i会有代价\(c_i\),如果一个区间j内的点全被选择,就可以获得回报\(p_j\)。点数和区间个数\(<1e5\)。
还以为是线段树优化网络流(50万个点200万条边看上去很可做的样子毕竟lbn说过网络流20万万条边完全没问题),没想到是个线段树dp。
(虽然这两个线段树完全扯不上关系)
用\(f[i][j]\)表示考虑到第i个点,向左最近的尚未选定的点为j时的最大值。那么,i+1可以选也可以不选。不选i时,\(f[i][j]\rightarrow f[i+1][i+1]\)。选i时,那么i和左边选过的连续点可以连成区间。则\(f[i][j]-c[i+1]+\sum_{l[k]>j,r[k]=i+1}p_k\rightarrow f[i+1][j]\)。
我们发现,除了i+1,j只会转移到j。因此,考虑使用线段树维护\(f[i]\)中状态的最大值。转移时,找出所有以i+1为右端点的区间,将他们按照左端点排序,对左端点之间形成的区间统一在线段树上更新即可。
#include <vector>
#include <set>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pi;
const int maxn=2e6+5;
ll n,m,x,y,z;
ll seg[maxn],add[maxn],c[maxn];
vector<pi> vec[maxn];
void push(ll x){
if (add[x]){
seg[x<<1]+=add[x]; seg[x<<1|1]+=add[x];
add[x<<1]+=add[x]; add[x<<1|1]+=add[x];
add[x]=0; }
}
ll query(ll x,ll l,ll r,ll L,ll R){
if (L<=l&&R>=r) return seg[x];
push(x); ll z=0;
ll mid=(l+r)>>1;
if (L<=mid) z=max(z, query(x<<1, l, mid, L, R));
if (R>mid) z=max(z, query(x<<1|1, mid+1, r, L, R));
return z;
}
void modify(ll x,ll l,ll r,ll L,ll R,ll v){
if (L<=l&&R>=r){ add[x]+=v; seg[x]+=v; return; }
push(x); ll mid=(l+r)>>1;
if (L<=mid) modify(x<<1, l, mid, L, R, v);
if (R>mid) modify(x<<1|1, mid+1, r, L, R, v);
seg[x]=max(seg[x<<1], seg[x<<1|1]);
}
int main(){
scanf("%lld%lld", &n, &m);
for (ll i=1; i<=n; i++) scanf("%lld", &c[i]);
for (ll i=1; i<=m; i++){
scanf("%lld%lld%lld", &x, &y, &z);
vec[y].push_back(make_pair(x,z));
}
for (ll i=1; i<=n; i++){
modify(1,0,n,i,i,query(1,0,n,0,i-1)); //j=i表示不选i
for (ll j=0; j<=(ll)vec[i].size()-1; j++) //加上区间价值
modify(1,0,n,0,vec[i][j].first-1,vec[i][j].second);
modify(1,0,n,0,i-1,-c[i]); //j!=i表示选i,需要减去c[i]
}
printf("%lld\n", seg[1]);
return 0;
}
降临(线段树优化dp)的更多相关文章
- Codeforces Round #426 (Div. 2) D 线段树优化dp
D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...
- BZOJ2090: [Poi2010]Monotonicity 2【线段树优化DP】
BZOJ2090: [Poi2010]Monotonicity 2[线段树优化DP] Description 给出N个正整数a[1..N],再给出K个关系符号(>.<或=)s[1..k]. ...
- [AGC011F] Train Service Planning [线段树优化dp+思维]
思路 模意义 这题真tm有意思 我上下楼梯了半天做出来的qwq 首先,考虑到每K分钟有一辆车,那么可以把所有的操作都放到模$K$意义下进行 这时,我们只需要考虑两边的两辆车就好了. 定义一些称呼: 上 ...
- 【bzoj3939】[Usaco2015 Feb]Cow Hopscotch 动态开点线段树优化dp
题目描述 Just like humans enjoy playing the game of Hopscotch, Farmer John's cows have invented a varian ...
- POJ 2376 Cleaning Shifts (线段树优化DP)
题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...
- 洛谷$P2605\ [ZJOI2010]$基站选址 线段树优化$dp$
正解:线段树优化$dp$ 解题报告: 传送门$QwQ$ 难受阿,,,本来想做考试题的,我还造了个精妙无比的题面,然后今天讲$dp$的时候被讲到了$kk$ 先考虑暴力$dp$?就设$f_{i,j}$表示 ...
- D - The Bakery CodeForces - 834D 线段树优化dp···
D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的. 直接说思路吧,说不清楚就看代码吧. 这个题目转 ...
- 4.11 省选模拟赛 序列 二分 线段树优化dp set优化dp 缩点
容易想到二分. 看到第一个条件容易想到缩点. 第二个条件自然是分段 然后让总和最小 容易想到dp. 缩点为先:我是采用了取了一个前缀最小值数组 二分+并查集缩点 当然也是可以直接采用 其他的奇奇怪怪的 ...
- Codeforces 1603D - Artistic Partition(莫反+线段树优化 dp)
Codeforces 题面传送门 & 洛谷题面传送门 学 whk 时比较无聊开了道题做做发现是道神题( 介绍一种不太一样的做法,不观察出决策单调性也可以做. 首先一个很 trivial 的 o ...
- 2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP)
2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP) https://www.luogu.com.cn/problem/P1848 题意: 当农夫约翰闲 ...
随机推荐
- Zookeeper学习(八):Zookeeper的数据发布与订阅模式
http://blog.csdn.net/ZuoAnYinXiang/article/category/6104448 1.发布订阅的基本概念 1.发布订阅模式可以看成一对多的关系:多 ...
- 【OpenCV】图像代数运算:平均值去噪,减去背景
代数运算,就是对两幅图像的点之间进行加.减.乘.除的运算.四种运算相应的公式为: 代数运算中比较常用的是图像相加和相减.图像相加常用来求平均值去除addtive噪声或者实现二次曝光(double-ex ...
- Java学习之ZooKeeper瑞士军刀简介
1.简介 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现.分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅.负载均衡.命名服务 ...
- HTML5实用知识点
本文讲解HTML5实用知识点 新增的表单type Canvas使用 SVG使用 Audio使用 Video使用 网页缓存 文件缓存 后台worker Server-Sent Events 定位 拖放功 ...
- MySQL组合索引最左匹配原则
几个重要的概念 1.对于mysql来说,一条sql中,一个表无论其蕴含的索引有多少,但是有且只用一条. 2.对于多列索引来说(a,b,c)其相当于3个索引(a),(a,b),(a,b,c)3个索引,又 ...
- 安装 MongoDB。
1.安装 MongoDB. 1.为软件包管理系统导入公钥. Ubuntu 软件包管理工具为了保证软件包的一致性和可靠性需要用 GPG 密钥检验软件包.使用下列命令导入 MongoDB 的 GPG 密钥 ...
- springmvc 在页面跳转之后 引入文件的路径前面加上了 controller 的映射名
转自:https://zhidao.baidu.com/question/2140453086362943788.html 应该是没有前面的/user的 前端用的是jsp吗,如果是在路径前加${pag ...
- hadoop 常用端口 及模块介绍
50070 namenode http port 50075 datanode http port 50090 ...
- 浅析大数据的技术生态圈(Hadoop,hive,spark)
大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可 ...
- 指定jdk编译或运行
set JAVA_HOME=D:\java\jdk8 set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOMe%\lib\tools.jar; set Pat ...