被亮亮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. C++为什么抓不到除0错“异常”?

    http://blog.csdn.net/nanyu/article/details/6475555 有人问这个问题: try { std::cout << 10/0 << s ...

  2. CLISTCTRL2

    回顾: 刚刚写完,因为是分期写的,所以最初想好好做一下的文章格式半途而废了~说的也许会有点啰嗦,但是所有的基础用到的技术细节应该都用到了. 如果还有什么疑问,请回复留言,我会尽力解答. 如果有错误,请 ...

  3. if语句,while语句,do whlie语句,循环语句

    总结: 1.定义数组并赋值: var arr=[1,2,3,4]; 2.通过下标访问数组: var str=arr[0]; 3.自定义数组 var arr=new Array(); 4.数组的赋值 a ...

  4. Qt 如何处理密集型耗时的事情

    有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态.例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响 ...

  5. [Luogu] P4626 一道水题 II

    ---恢复内容开始--- 题目描述 一天,szb 在上学的路上遇到了灰太狼. 灰太狼:帮我们做出这道题就放了你. szb:什么题? 灰太狼:求一个能被 [1,n] 内所有数整除的最小数字,并对 100 ...

  6. linux命令 info

    info命令是Linux下info格式的帮助指令. 就内容来说,info页面比man page编写得要更好.更容易理解,也更友好,但man page使用起来确实要更容易得多.一个man page只有一 ...

  7. idea14远程调试linux下的tomcat

    进入到idea的tomcat的run/debug配置,新建个remote tomcat,然后填写相关信息,如上图(注意远程调试端口). 再选择Startup/Connection,如下图所示: 到此, ...

  8. SQL学习笔记:表的约束

    目录 NOT NULL约束 INDEX 索引 CHECK 约束 DEFAULT 约束 UNIQUE 约束 PRIMARY KEY 约束 FOREIGN KEY 约束:简单的说,就是创建表的时候,对表或 ...

  9. 【Codeforces 1129A】Toy Train

    [链接] 我是链接,点我呀:) [题意] 火车从1,2,3...n->1的方式绕圈走.(即每次从i走到i+1) 有一些点有货物需要装载,但是每个点只能装上去一个货物. 每个货物都有目标点卸货点( ...

  10. fetch api & response header

    how to get fetch response header in js https://stackoverflow.com/questions/43344819/reading-response ...