降临

选定点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)的更多相关文章

  1. 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 ...

  2. BZOJ2090: [Poi2010]Monotonicity 2【线段树优化DP】

    BZOJ2090: [Poi2010]Monotonicity 2[线段树优化DP] Description 给出N个正整数a[1..N],再给出K个关系符号(>.<或=)s[1..k]. ...

  3. [AGC011F] Train Service Planning [线段树优化dp+思维]

    思路 模意义 这题真tm有意思 我上下楼梯了半天做出来的qwq 首先,考虑到每K分钟有一辆车,那么可以把所有的操作都放到模$K$意义下进行 这时,我们只需要考虑两边的两辆车就好了. 定义一些称呼: 上 ...

  4. 【bzoj3939】[Usaco2015 Feb]Cow Hopscotch 动态开点线段树优化dp

    题目描述 Just like humans enjoy playing the game of Hopscotch, Farmer John's cows have invented a varian ...

  5. POJ 2376 Cleaning Shifts (线段树优化DP)

    题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...

  6. 洛谷$P2605\ [ZJOI2010]$基站选址 线段树优化$dp$

    正解:线段树优化$dp$ 解题报告: 传送门$QwQ$ 难受阿,,,本来想做考试题的,我还造了个精妙无比的题面,然后今天讲$dp$的时候被讲到了$kk$ 先考虑暴力$dp$?就设$f_{i,j}$表示 ...

  7. D - The Bakery CodeForces - 834D 线段树优化dp···

    D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的. 直接说思路吧,说不清楚就看代码吧. 这个题目转 ...

  8. 4.11 省选模拟赛 序列 二分 线段树优化dp set优化dp 缩点

    容易想到二分. 看到第一个条件容易想到缩点. 第二个条件自然是分段 然后让总和最小 容易想到dp. 缩点为先:我是采用了取了一个前缀最小值数组 二分+并查集缩点 当然也是可以直接采用 其他的奇奇怪怪的 ...

  9. Codeforces 1603D - Artistic Partition(莫反+线段树优化 dp)

    Codeforces 题面传送门 & 洛谷题面传送门 学 whk 时比较无聊开了道题做做发现是道神题( 介绍一种不太一样的做法,不观察出决策单调性也可以做. 首先一个很 trivial 的 o ...

  10. 2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP)

    2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP) https://www.luogu.com.cn/problem/P1848 题意: 当农夫约翰闲 ...

随机推荐

  1. springboot实现定时任务的一种方式

    参考:https://www.yoodb.com/news/detail/1205 目前觉得这种还是很好用,所以就记录. 最好新建一个项目测试: 1. pom中添加 <dependency> ...

  2. web聊天相关知识

    http相关知识 http是无状态,请求,响应模式的通信模式,就是用户每次通过浏览器点击一下页面,都需要重新与web服务器建立一下连接,且发送自己的 session id 给服务器端以使服务器端验证此 ...

  3. maven中maven dependencies中依赖出现了项目

    maven 中maven dependencies中依赖出现了项目,把依赖的项目关掉,项目消失,但是还是无法打包 ,出现的错误如图.说明:依赖的项目为project-dao  打包的项目为projec ...

  4. VMware安装操作系统(Operating System not found一个错误原因)

    因为指定的IOS文件是多种操作系统的组合,如Win7(32位和64位完全版),那么安装的时候选择一个操作系统类型和ios文件的类型就匹配不上,所以出现这种错误.

  5. PowerDesigner的CDM模型将低驼峰命名法则的每个大写字母前加_符

    Option   Explicit ValidationMode   =   True InteractiveMode =   im_Batch Dim   mdl   '当前model '获取当前活 ...

  6. 2015.1.15 利用航线id取所有点的函数创建视图

    1.根据航路id取所有航路点的函数 create or replace function alinepnts(alid in number) return tab_airline_pnt is --返 ...

  7. sql server小知识

    SELECT TOP 10000 * FROM [LogFeedback].[dbo].[ahwater_perf_monitor] order by timestramp desc   降序 asc ...

  8. 11-09SQLserver 基础-数据库之汇总练习45题

    设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表 ...

  9. latex bib format

    LaTeX 的对参考文献的处理实在是非常的方便,我用过几次,有些体会,写出来供大家参考.当然,自己的功力还不够深,有些地方问题一解决就罢手了,没有细究. LaTeX 对参考文献的处理有这么一些优点: ...

  10. c++对象模型探索(一)

    粗略阅读了<深度探索c++对象模型>一书后,对c++对象底层的内存布局有了一些了解,但同时,也产生了一些疑惑: 1.将子类指针用dynamic_cast转成父类指针之后,其虚表指针会相应变 ...