pro: 从左到有有N个车道,都有一定程度损坏,所以有不同的修理费a[]; 有M场比赛,每场比赛的场地是[Li,Ri],即如果这个区间的车道都被修理好,则可以举办这个比赛,并且收益是Pi。问最多得到多少收益。N,M<2e5;

sol: 比较明显的右端点排序,求最大DP问题。  dp[i]表示只考虑修前i条路的最大收益,那么dp[i]=max(dp[j]+P(j+1,i)-a(j+1,i));

P(i,j)表示这个区间的收益,a(i,j)表示这个区间的修理费。 考虑无后效性,我们按右端点排序,然后从1到N模拟修路,每个点的左边区间减去修理费,遇到比赛的右端点,在左区间加上收益。 一直更新即可。

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
struct in{
int L,R,P;
friend bool operator <(in w,in v){ return w.R<v.R; }
}s[maxn];
ll a[maxn],lazy[maxn<<],mx[maxn<<],dp[maxn];
void pushdown(int Now)
{
if(lazy[Now]) {
lazy[Now<<]+=lazy[Now];
lazy[Now<<|]+=lazy[Now];
mx[Now<<]+=lazy[Now];
mx[Now<<|]+=lazy[Now];
lazy[Now]=;
}
}
void add(int Now,int L,int R,int l,int r,ll val)
{
if(l<=L&&r>=R){
mx[Now]+=val; lazy[Now]+=val;
return ;
}
pushdown(Now);
int Mid=(L+R)>>;
if(l<=Mid) add(Now<<,L,Mid,l,r,val);
if(r>Mid) add(Now<<|,Mid+,R,l,r,val);
mx[Now]=max(mx[Now<<],mx[Now<<|]);
}
ll query(int Now,int L,int R,int l,int r)
{
if(l<=L&&r>=R) return mx[Now];
int Mid=(L+R)>>; ll res=; pushdown(Now);
if(l<=Mid) res=max(res,query(Now<<,L,Mid,l,r));
if(r>Mid) res=max(res,query(Now<<|,Mid+,R,l,r));
mx[Now]=max(mx[Now<<],mx[Now<<|]);
return res;
}
int main()
{
int N,M;
scanf("%d%d",&N,&M);
rep(i,,N) scanf("%d",&a[i]);
rep(i,,M) scanf("%d%d%d",&s[i].L,&s[i].R,&s[i].P);
sort(s+,s+M+);
int p=;
rep(i,,N) {
add(,,N,,i-,-a[i]);
while(p+<=M&&s[p+].R<=i) p++,add(,,N,,s[p].L-,s[p].P);
dp[i]=max(query(,,N,,i-),dp[i-]);
add(,,N,i,i,dp[i]);
}
printf("%lld\n",dp[N]);
return ;
}

CodeForces - 115E:Linear Kingdom Races (DP+线段树+lazy)的更多相关文章

  1. [Codeforces 115E]Linear Kingdom Races

    题目大意: 有n块地,初始是荒地.你可以把某些荒地开垦(需要花费相应的价值\(a_i\)(正整数)),然后这些荒地就可以种田. 现在有m年,每年要在l到r区间内种田,获得p(正整数)的价值(必须保证l ...

  2. Codeforces 834D The Bakery【dp+线段树维护+lazy】

    D. The Bakery time limit per test:2.5 seconds memory limit per test:256 megabytes input:standard inp ...

  3. Codeforces 834D - The Bakery(dp+线段树)

    834D - The Bakery 思路:dp[i][j]表示到第j个数为止分成i段的最大总和值. dp[i][j]=max{dp[i-1][x]+c(x+1,j)(i-1≤x≤j-1)},c(x+1 ...

  4. Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树)

    Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树) 题目链接 题意 给定一个nm的矩阵,每行取2k的矩阵,求总 ...

  5. [CF115E]Linear Kingdom Races

    [CF115E]Linear Kingdom Races 题目大意: 有\(n(n\le10^5)\)个物品,编号为\(1\sim n\).选取第\(i\)个物品需要\(c_i\)的代价.另外有\(m ...

  6. cf834D(dp+线段树区间最值,区间更新)

    题目链接: http://codeforces.com/contest/834/problem/D 题意: 每个数字代表一种颜色, 一个区间的美丽度为其中颜色的种数, 给出一个有 n 个元素的数组, ...

  7. ZOJ 3349 Special Subsequence 简单DP + 线段树

    同 HDU 2836 只不过改成了求最长子串. DP+线段树单点修改+区间查最值. #include <cstdio> #include <cstring> #include ...

  8. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  9. [Codeforces 266E]More Queries to Array...(线段树+二项式定理)

    [Codeforces 266E]More Queries to Array...(线段树+二项式定理) 题面 维护一个长度为\(n\)的序列\(a\),\(m\)个操作 区间赋值为\(x\) 查询\ ...

随机推荐

  1. 推荐一款好用的json导出execl格式的文件的js工具-JsonExportExcel

    <html> <head> <meta charset="utf-8"> <title>json导出Excel</title& ...

  2. Vue(七)整合vue-router&Vuex&Axios

    整合vue-router&Vuex 先创建工程 vue create vue-axios 然后选择 勾选 回车,出现是否使用history mode?选择y,代表URL地址里面不会出现#.选择 ...

  3. [转帖]关于4A(统一安全管理平台)系统的理解

    雪山上的蒲公英 https://www.cnblogs.com/zjfjava/p/10674577.html 关于4A(统一安全管理平台)系统的理解   1. 4A系统的需求分析 近年来企业用户的业 ...

  4. flask源码系列

    更新中 HTML文档中元素存在,但是在浏览器中不显示.一般用于配合JavaScript代码使用. 04 LocalStack和Local对象实现栈的管理 05 Flask源码之:配置加载 06 Fla ...

  5. Python多进程方式抓取基金网站内容的方法分析

    因为进程也不是越多越好,我们计划分3个进程执行.意思就是 :把总共要抓取的28页分成三部分. 怎么分呢? # 初始range r = range(1,29) # 步长 step = 10 myList ...

  6. Python知识之 方法与函数、偏函数、轮询和长轮询、流量削峰、乐观锁与悲观锁

    方法与函数 函数需要手动传参self.cls,方法自动传,比如对象方法自动传self,类方法自动传cls,而函数相对而言需要手动传,比如静态绑定的函数,self是需要手动传值得,比如我们平常使用的函数 ...

  7. 【leetcode】501. Find Mode in Binary Search Tree

    class Solution { public: vector<int> modes; int maxCnt = 0; int curCnt = 0; int curNum = 0; ve ...

  8. Java—十进制数对n进制数转换

    import java.math.BigInteger;import java.util.Scanner; /** * @auther Aohui * @create 2019-11-06-15:33 ...

  9. Excel 2010同时打开2个或多个独立窗口

    亲测有效 参考下面的网址 https://jingyan.baidu.com/article/86fae346acca7d3c49121ad4.html 1. 在win+r  输入框里面输入“rege ...

  10. 设计模式--Bulider模式

    起因:最近在做统计计算,创建的实体中属性比较多,都是一些数值,一开始是通过get.set方法进行赋值,占用了很多业务代码方法的长度,可读性不太好,后来改用了添加构造器的方式,稍显精简了一点,但是每次赋 ...