제출 #990950

#제출 시각아이디문제언어결과실행 시간메모리
990950alexddAutobahn (COI21_autobahn)C++17
100 / 100
439 ms63052 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,lun,cate;
vector<pair<int,int>> v,v2;
map<int,int> mp,nrm;
int inv[400005];
int mars[400005],mars2[400005];
signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>k>>lun;
    int le,ri,t;
    for(int i=1;i<=n;i++)
    {
        cin>>le>>t>>ri;
        v2.push_back({le,ri});
        mp[le]++;
        mp[ri]++;
        mp[ri+1]++;
        le+=t;
        if(ri>=le)
        {
            v.push_back({le,ri});
            mp[le]++;
        }
    }
    for(auto it:mp)
    {
        nrm[it.first]=++cate;
        inv[cate]=it.first;
    }
    for(auto x:v)
    {
        mars[nrm[x.first]]++;
        mars[nrm[x.second+1]]--;
    }
    for(auto x:v2)
    {
        mars2[nrm[x.first]]++;
        mars2[nrm[x.second+1]]--;
    }
    for(int i=1;i<=cate;i++)
    {
        mars2[i]+=mars2[i-1];
        mars[i]+=mars[i-1];
    }
    for(int i=1;i<=cate;i++)
        if(mars2[i]<k)
            mars[i]=0;
    int poz=1,sum=0,mxm=0;
    inv[cate+1]=inv[cate]+1;
    for(int i=1;i<cate;i++)
    {
        sum += mars[i]*(inv[i+1]-inv[i]);
        while(inv[i+1]-inv[poz+1] >= lun)
        {
            sum -= mars[poz]*(inv[poz+1]-inv[poz]);
            poz++;
        }
        mxm = max(mxm, sum - mars[poz]*((inv[i+1]-inv[poz])-lun));
    }
    cout<<mxm;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...