降临(线段树优化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 题意: 当农夫约翰闲 ...
随机推荐
- MongoDB 3.4 高可用集群搭建(二)replica set 副本集
转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<MongoDB 3.4 高可用集群搭建(一):主从模式&g ...
- c# 设置水印,消除水印
方案1: 图像处理 opencv etc 方案2: 开源框架,直接使用,已经优化 https://github.com/itext/itextsharp https://github.com/itex ...
- mybatis如何防止sql注入(1)
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=‘1’”这样的语句,有可能入侵参数校验不足的应用程序.所以在我们的应用中需要 ...
- Git学习笔记(二)分支管理与合并及Bug分支
一.分支管理 1.什么是分支 分支就相当于我们看科幻片里的平行宇宙,如果两个平行宇宙互不干扰,那铁定是啥事儿没有.不过,在某个时间点,两个平行宇宙合并了呢?假如两个宇宙中都有你的影子, 合并之后相当于 ...
- 2017年总结&2018年计划
谈一谈2017年计划: 1.完成壁咚项目2.写一个自己的扫描器3.完善web安全手册.4.搞一个大漏洞或CVE的漏洞 完成进度:1.壁咚这个项目,当初发誓要用java来写完,其实最开始就已经写完了,前 ...
- leetcode589
树的先序遍历,使用递归实现. class Solution { public: vector<Node> Tree; void preTree(Node node) { Tree.push ...
- SQL 实现行列互换
Oracle:不过大多数是采用 oracle 数据库当中的一些便捷函数进行处理,比如 ”pivot”: MySql:目前没有找到更好的方法 题目:数据库中有一张如下所示的表,表名为sales. 年 季 ...
- JSP+Servlet 无数据库模拟登录过程
程序目录结构: index.jsp: <%@ page language="java" contentType="text/html; charset=utf-8& ...
- easyui中 combogrid控件的loadData方法加载本地数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【Android异常】The specified child already has a parent. You must call removeView() on the child's parent first.
错误信息: Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must ...