首页 > 其他分享 >「JOISC 2020 Day4」治疗计划

「JOISC 2020 Day4」治疗计划

时间:2023-02-03 17:23:04浏览次数:76  
标签:return int Day4 GetC JOISC 2020 inf include ll

\(\mathcal Link\)

注意到“覆盖”并不好处理,我们只需保证:

  • 有一个 \([1,p]\)
  • 有一个 \([q,n]\)
  • 没有空隙

根据套路,设 \(f_ i\) 表示考虑所有完全在 \([1,r_i]\) 中的区间使得中间没有空隙的最小代价。

转移限制为 \(r_i-l_j+1\geq |T_i-T_j|\),方程为 \(f_i+c_j\rightarrow f_j\)

这是一个最短路,使用 Dijkstra 即可,更新时用线段树找点。

由于 \(c_j\) 恒定,所以 \(f_j\) 只会在第一次被更新,只需要在更新一次后将其置为不可访问即可。

#include <cstdio>
#include <cctype>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;

using ll=long long;
using pli=pair<ll, int>;

#define mk make_pair

char buf[1<<14], *p1=buf, *p2=buf;
#define GetC() ((p1==p2)&&(p2=(p1=buf)+fread(buf,1,1<<14,stdin),p1==p2)?EOF:*p1++)
struct Ios{}io;
template <typename _tp>
Ios &operator >>(Ios &in, _tp &x){
    x=0; int w=0; char c=GetC();
    for(;!isdigit(c);w|=c=='-', c=GetC());
    for(;isdigit(c);x=x*10+(c^'0'), c=GetC());
    if(w) x=-x;
    return in;
}

const int N=1e5+5;
const ll inf=1e18;

int n, m;
ll ans=inf;

struct qwq{ int t, l, r, c; }a[N];

priority_queue <pli, vector<pli>, greater<pli> > q;

ll mn1[N<<2], mn2[N<<2];
void up(int p){
    mn1[p]=min(mn1[p<<1], mn1[p<<1|1]);
    mn2[p]=min(mn2[p<<1], mn2[p<<1|1]);
}
void build(int p, int l, int r){
    if(l==r){
        mn1[p]=a[l].l-a[l].t;
        mn2[p]=a[l].l+a[l].t;
        return ;
    }
    int mid=(l+r)>>1;
    build(p<<1, l, mid);
    build(p<<1|1, mid+1, r);
    up(p);
}

ll d;

void updateL(int p, int l, int r, int limp, int limv){
    if(mn1[p]>limv) return ;
    if(l==r){
        q.push(mk(d+a[l].c, l));
        mn1[p]=mn2[p]=inf;
        return ;
    }
    int mid=(l+r)>>1;
    updateL(p<<1, l, mid, limp, limv);
    if(mid<limp) updateL(p<<1|1, mid+1, r, limp ,limv);
    up(p);
}
void updateR(int p, int l, int r, int limp, int limv){
    if(mn2[p]>limv) return ;
    if(l==r){
        q.push(mk(d+a[l].c, l));
        mn1[p]=mn2[p]=inf;
        return ;
    }
    int mid=(l+r)>>1;
    if(mid>=limp) updateR(p<<1, l, mid ,limp, limv); 
    updateR(p<<1|1, mid+1, r, limp, limv);
    up(p);
}

void dij(){
    for(int i=1;i<=m;++i) if(a[i].l==1) q.push(mk(a[i].c, i));

    while(!q.empty()){
        pli u=q.top(); q.pop();
        int x=u.second; d=u.first;
        if(a[x].r==n) ans=min(ans, d);
        if(x>1) updateL(1, 1, m, x-1, a[x].r-a[x].t+1);
        if(x<m) updateR(1, 1, m, x+1, a[x].r+a[x].t+1);
    }
}

int main(){
    io>>n>>m;
    for(int i=1;i<=m;++i)
        io>>a[i].t>>a[i].l>>a[i].r>>a[i].c;

    sort(a+1, a+m+1, [](qwq x, qwq y){ return x.t<y.t; });
    
    build(1, 1, m);
    dij();
    
    if(ans!=inf) printf("%lld\n", ans);
    else puts("-1");
    return 0;
}

标签:return,int,Day4,GetC,JOISC,2020,inf,include,ll
From: https://www.cnblogs.com/pref-ctrl27/p/17089946.html

相关文章

  • 【YBT2023寒假Day4 C】樱桃莓莓(交互)(四毛子分块)(线段树)
    樱桃莓莓题目链接:YBT2023寒假Day4C题目大意有一个黑盒操作满足交换律和结合律,有n个数,q次询问,每次选m个下标,你要计算所有不包含那m个下标的数进行黑盒操作之后的......
  • 【YBT2023寒假Day4 B】人人人数(数学)
    人人人数题目链接:YBT2023寒假Day4B题目大意随机生成一个长度为m且每个元素都是1~n的整数单调不降序列,问你这个序列的众数的期望出现次数是多少。(随机是所有满足条......
  • 2020牛客暑期多校训练营(第八场)
    GGameSET题意:一套牌有四种属性,每种属性都有三种特征,,,,,如果是,可以选任意一种。给出套牌,每套牌给出,问有没有三张牌符合同一属性的特征要么全都相同,要么全都不同。先......
  • 2020牛客暑期多校训练营(第七场)
    BMaskAllocation题意:就是将个口罩分成份,使得可以从中挑出组,每组口罩数一样多;也可以从中挑出AC代码:constintN=1e5+10;constllmod=1e9+7;inta[N];intm......
  • 2020年7月27日总结
    这几场比赛打下来,发现自己之前的部分模板都不能用了,不知道是数据卡的紧了,还是之前没有整理好,然后又重新整理了一遍,和队友商量了一下做题的策略,我负责快速签到,然后把铜牌题做......
  • 2020牛客暑期多校训练营(第六场)
    BBinaryVector题意:随机生成个向量,使这个为一组,求这可以选择两种,只有符合,和任何向量都不线性无关。所以有三个组合,他们都是独立的,就是,然后加上顺序就是一......
  • 2020牛客暑期多校训练营(第五场)
    DDropVoicing(dp)题意:有一个:将倒数第二个数放到开头,前面的数向后平移:将倒数第二个数放到开头,前面的数向后平移若干连续的称为。计算要使该排列排成所需的最少的可以......
  • 2020牛客暑期多校训练营(第四场)
    BBasicGcdProblem题意:给出举个例子:继续递推下去:即:就是看的贡献,也就是AC代码:#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmxn=10......
  • 2020年7月19日训练总结
    这周算是正式开始了暑假的训练,按照计划就是周一牛客多校,周三多校,周五多校,周六牛客多校,这四场打下来的感觉就是难,应该和区域赛的难度是差不多的。这四场的平均排名也就是......
  • 2020牛客暑期多校训练营(第三场)
    AClamandFish(贪心)题意:蛤可以制作成鱼饵,来获取鱼,但是在有蛤的时候需要制作成鱼饵在下一阶段才能使用,且直接有鱼的情况下,不需要用鱼饵也可以获取鱼。制作鱼饵和直接钓鱼在......