被亮亮D飞啦!!QWQ

这题明明是最大权闭合子图+线段树优化构图好不好

被迫考虑DP,并且考虑f[i]表示到第i个位置的最大值(第i个位置可选可不选)

对于最终的答案,我们可以分割成一段一段的,也就是多段区间

枚举这个断点,断点以后的全选,前面的就通过继承得到,f[i]=f[j]-(sc[i]-sc[j])+(j+1到i这个区间中可以承办的比赛的价值和)

用数据结构优化的话,前面就可以nlogn了

而后面这一个,我们可以弄一个指针扫区间,看看当前是不是已经完全覆盖了,然后选取区间起始到这个区间的左界-1作为决策,后面的价值和就会加上这个区间的价值

区间修改也是线段树搞

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; struct node
{
int l,r,lc,rc;LL c,lazy;
}tr[];int trlen;
void bt(int l,int r)
{
int now=++trlen;
tr[now].l=l;tr[now].r=r;
tr[now].lc=tr[now].rc=-;
tr[now].c=;tr[now].lazy=;
if(l<r)
{
int mid=(l+r)/;
tr[now].lc=trlen+;bt(l,mid);
tr[now].rc=trlen+;bt(mid+,r);
}
}
void change(int now,int l,int r,LL k)
{
if(tr[now].l==l&&tr[now].r==r)
{
tr[now].c+=k;tr[now].lazy+=k;
return ;
} int mid=(tr[now].l+tr[now].r)/;
int lc=tr[now].lc,rc=tr[now].rc; if(tr[now].lazy!=)
{
tr[lc].c+=tr[now].lazy;
tr[rc].c+=tr[now].lazy;
tr[lc].lazy+=tr[now].lazy;
tr[rc].lazy+=tr[now].lazy;
tr[now].lazy=;
} if(r<=mid) change(lc,l,r,k);
else if(mid+<=l)change(rc,l,r,k);
else change(lc,l,mid,k),change(rc,mid+,r,k);
tr[now].c=max(tr[lc].c,tr[rc].c);
}
LL getmax(int now,int l,int r)
{
if(tr[now].l==l&&tr[now].r==r)return tr[now].c; int mid=(tr[now].l+tr[now].r)/;
int lc=tr[now].lc,rc=tr[now].rc; if(tr[now].lazy!=)
{
tr[lc].c+=tr[now].lazy;
tr[rc].c+=tr[now].lazy;
tr[lc].lazy+=tr[now].lazy;
tr[rc].lazy+=tr[now].lazy;
} if(r<=mid) return getmax(lc,l,r);
else if(mid+<=l)return getmax(rc,l,r);
else return max(getmax(lc,l,mid),getmax(rc,mid+,r));
} LL sc[];
struct game{int l,r;LL v;}g[];
bool cmp(game g1,game g2){return g1.r==g2.r?g1.l<g2.l:g1.r<g2.r;}
LL f[];
int main()
{
int n,m;
scanf("%d%d",&n,&m);sc[]=;
for(int i=;i<=n;i++)
scanf("%lld",&sc[i]), sc[i]+=sc[i-];
g[].r=;
for(int i=;i<=m;i++)
scanf("%d%d%lld",&g[i].l,&g[i].r,&g[i].v);
sort(g+,g+m+,cmp); trlen=;bt(,n);
f[]=;
for(int i=,j=;i<=n;i++)
{
while(j<=m&&g[j].r<=i)change(,,g[j].l-,g[j].v),j++;
f[i]=max(f[i-],getmax(,,i-)-sc[i]);
change(,i,i,f[i]+sc[i]);
}
printf("%lld\n",f[n]);
return ;
}

51nod 1611 金牌赛事的更多相关文章

  1. NOIP2018提高组金牌训练营——动态规划专题

    NOIP2018提高组金牌训练营——动态规划专题 https://www.51nod.com/Live/LiveDescription.html#!#liveId=19 多重背包 二进制优化转化成01 ...

  2. NOIP2018提高组金牌训练营——字符串专题

    NOIP2018提高组金牌训练营——字符串专题 1154 回文串划分 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式.   a|bb|aabaa - 3 个 ...

  3. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  4. 51Nod 1268 和为K的组合

    51Nod  1268  和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...

  5. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

  6. 51Nod 1278 相离的圆

    51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...

  7. .NET足球赛事资料数据库平台SmartLottery开源发布——全球足球联赛应有尽有

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 前2个月,我的系列文 ...

  8. Autodesk正在招聘Civil、Infraworks金牌支持工程师(Premium Support Specialist)

    Civil Infraworks金牌支持工程师,也不知道中文这么翻对不对,反正很牛的,地点优选上海,不过其他地区也没问题啊,感兴趣的,赶紧扔简历过来,我当你内线,帮你内推 :) Autodesk是全球 ...

  9. 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...

随机推荐

  1. js让页面逐渐变透明,直到消失

    在gitHub闲逛的时候,无意间发现了些好玩的代码,一个歪果仁写的,这里我做了些修改和优化,gitHub链接已经忘了,是一段恶搞的js代码,假如你的顾客或者老板拖欠你工资,那你就可以让项目页面在浏览器 ...

  2. java虚拟机(九)--常用jvm参数

    1.-Xms20M: 表示设置JVM启动内存的最小值为20M,必须以M为单位 2.-Xmx20M: 表示设置JVM启动内存的最大值为20M,必须以M为单位.将-Xmx和-Xms设置为一样可以避免JVM ...

  3. 第三节:执行一些EF的增删改查

    针对两表操作 一丶增加 #region 05-增加操作 /// <summary> /// 05-增加操作 /// </summary> /// <param name= ...

  4. HDU6189 Law of Commutation (数论)

    题意:输入n和a 定义m等于2的n次方 求1-m有多少数使得 a^b = b^a (mod m) 题解:先打表找规律 发现a为奇数的答案只有b = a这一种 (不知道为什么也不想知道为什么 当a为偶数 ...

  5. 网络编程-socketserver

    网络编程使用socketserver,通常包括以下几步:一.定义类,并继承socketserver.BaseRequestHandler 二.重写handle方法 三.实例化TCPServer,并传递 ...

  6. lastpass密码管理工具使用教程

    现在移动互联网发展异常空气,无论访问哪个平台或者网站必须要注册账号,日子久了就会发现最痛苦的就是记住这些网站的密码.因为我们不可能将所有的网站都是设置同样的的账号密码,因为国内网站用户数据库被泄露的事 ...

  7. 以位为单位存储标志-共用体-union

    一.程序的结构如下: typedef union _KEYST     {         struct         {             uint8 Key1_Flag :1;//表示第0 ...

  8. Spring使用DriverManagerDataSource和C3P0分别配置MySql6.0.6数据源

    首先,看一下项目路径 先说spring配置文件吧,这个比较重要 <?xml version="1.0" encoding="UTF-8"?> < ...

  9. redis学习——数据类型

    一.内容简介 Redis不仅仅是简单的key-value 存储器,同时也是一种data structures server.传统的key-value是指支持使用一个key字符串来索引value字符串的 ...

  10. Leetcode 93.复制IP地址

    复制IP地址 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135& ...