$Luogu$

$Sol$

觉得这题贪心要想很多事情,不适合我这种没脑子选手$ovo$.看题解还理解了很久.

最开始是这样想的:把所有的路段上的乘客按大小排个序用加速器就好了,这个想法被自己轻松$hack.$因为,假如一个路段的终点没人下车而且又要等乘客很久才能出发,那前面用加速器也没意义了.由这个反例似乎可以推出用$1$个加速器能减少的时间?由这个起点向后枚举点,看用了加速器到达后是否还需要等乘客,如果不是,那么这个加速器对于这站下车的乘客就是有帮助的.由此也可以看出用加速器之后可能会对后面的出发时间有影响,这里需要一个变量来维护.

具体来说:

$off[i]$表示第$i$站下车的乘客数量.

$arr[i]$表示第$i$站乘车的乘客的最晚到达时间.

$dd[i]$表示汽车到达$i$站的时间.

$d[i]$表示第$i$站到第$i+1$站所需要的时间.

$dd[i]=max(dd[i-1],arr[i-1])+d[i-1].$

$aff[i]$表示假设$(i,i+1)$这段路程所需时间减少$1$,那么在$aff[i]$下站的人是最后的受益者.

差不多就是维护上面的变量就好了,具体看代码叭.

$Code$

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define yes(i,a,b) for(Rg int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))
#define int long long
#define db double
#define inf 2147483647
using namespace std;
il int read()
{
Rg int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
const int N=;
int n,m,k,as,off[N],arr[N],dd[N],sum[N],d[N],aff[N];
struct node{int t,u,v;}a[N*];
main()
{
n=read(),m=read(),k=read();
go(i,,n-)d[i]=read();
go(i,,m)
{
a[i]=(node){read(),read(),read()};
off[a[i].v]++;
arr[a[i].u]=max(arr[a[i].u],a[i].t);
}
go(i,,n)dd[i]=max(dd[i-],arr[i-])+d[i-];
go(i,,n)sum[i]=sum[i-]+off[i];
go(i,,m)as+=dd[a[i].v]-a[i].t;
arr[n]=inf;
while(k--)
{
int maxs=,qwq=;
yes(i,n-,)
if(dd[i+]>arr[i+])aff[i]=aff[i+];
else aff[i]=i+;
go(i,,n-)
if(sum[aff[i]]-sum[i]>maxs&&d[i])
maxs=sum[aff[i]]-sum[i],qwq=i;
as-=maxs;d[qwq]-=;
go(i,,n)dd[i]=max(dd[i-],arr[i-])+d[i-];
}
printf("%lld\n",as);
return ;
}

随机推荐

  1. LeetCode80 Remove Duplicates from Sorted Array II

    题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? (Mediu ...

  2. 报错No module named IPython的解决方法

    没有按照 ipython 或者 ide 没有选择编译器

  3. @bzoj - 4922@ [Lydsy1706月赛]Karp-de-Chant Number

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 卡常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令 ...

  4. css设置Overflow实现隐藏滚动条的同时又可以滚动

    .scroll-list ul{ white-space: nowrap; -webkit-overflow-scrolling: touch; overflow-x: auto; overflow- ...

  5. vue3——vue数据循环渲染

    博客地址 :https://www.cnblogs.com/sandraryan/ vue循环渲染 <!DOCTYPE html> <html lang="en" ...

  6. 第二次 C++作业

    1.为什么要用函数? 函数是相对独立的,经常使用的功能抽象化表现形式,函数的优势在于,编写之后可以被重复使用,使用时可以只关心函数的功能和使用方法而不必关心函数的具体实现,这样可以有利于代码重用,可以 ...

  7. 【CSS3】纯CSS3制作页面切换效果

    此前写的那个太复杂了,来点简单的核心 <html> <head> <title></title> <style type="text/c ...

  8. hdu 4430 Yukari's Birthday (简单数学 + 二分)

    Problem - 4430 题意是,给出蜡烛的数量,要求求出r和k,r是蜡烛的层数,k是每一层蜡烛数目的底数. 开始的时候,没有看清题目,其实中间的那根蜡烛是可放可不放的.假设放置中间的那根蜡烛,就 ...

  9. H3C CHAP验证配置示例二

  10. js利用select标签生成简易计算功能

    html中使用select option作为运算符的承接容器,输入值,选择不同运算符,计算结果. 文章地址 https://www.cnblogs.com/sandraryan/ <!DOCTY ...