降临

选定点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. Jetty + Servlet 实现文件下载

    Jetty非常适合做嵌入式web开发,正如Jetty的口号"Don’t deploy your application in Jetty, deploy Jetty in your appl ...

  2. 学习Linux相关书籍

    要推荐的书,我在<那两年炼就的Android内功修养>这篇文章中有提到,这里再列一下出来: 语言类: <深度探索C++对象模型>,对应的英文版是<Inside C+++  ...

  3. Lib之过?Java反序列化漏洞通用利用分析

    转http://blog.chaitin.com/ 1 背景 2 Java反序列化漏洞简介 3 利用Apache Commons Collections实现远程代码执行 4 漏洞利用实例 4.1 利用 ...

  4. iOS消息转发机制

    iOS消息转发机制 “消息派发系统”(message-dispatch system) 若想令类能够理解某条消息,我们必须实现出对应的方法才行.但是,在编译器向类发送其无法解读的消息时并不会报错,因为 ...

  5. mybatis如何防止sql注入(1)

    sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=‘1’”这样的语句,有可能入侵参数校验不足的应用程序.所以在我们的应用中需要 ...

  6. php字符型转整型

    $arr = array(0=>1,"aa"=>2, 3, 4); foreach($arr as $key=>$val){ print($key == &quo ...

  7. centos7的xfs配置

    XFS是扩展性高.高性能的文件系统.也是rhel7/centos7的默认文件系统.XFS支持metadata journaling,这使其能从crash中更快速的恢复.它也支持在挂载和活动的状态下进行 ...

  8. java 多线程系列基础篇(十一)之生产消费者问题

    1. 生产/消费者模型 生产/消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下:(01) 生产者仅仅在仓储未满时候生产,仓满则停止生产 ...

  9. leetcode628

    这道题十分不容易啊,做到半夜. class Solution { public: static int cmp628(int a, int b) { return a > b; } static ...

  10. Shell编程进阶 1.8 for循环

    产生序列的命令 seq 1 2 3 4 5 6 7 8 9 10 seq 1 3 5 7 9  (从1开始增加2显示这个数字,到10结束) seq - 10 8 6 4 2 seq - 10 9 8 ...