제출 #1310611

#제출 시각아이디문제언어결과실행 시간메모리
1310611quollcucumber`Autobahn (COI21_autobahn)C++20
0 / 100
1 ms332 KiB
// #pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
// #pragma GCC target("avx2")
#define int long long
using namespace std;

signed main(){
    int n, k, x;
    cin >> n >> k >> x;
    int crime[n];
    vector<pair<int, pair<int, int>>> v;
    for(int i = 0; i < n; i++) {
        int l, t, r;
        cin >> l >> t >> r;
        v.push_back({l, {i, 1}});
        v.push_back({r + 1, {i, -2}});
        v.push_back({r + 1, {i + k, 3}});
        crime[i] = max(0ll, (r - l + 1)  - t);
    }
    sort(v.begin(), v.end());
    int overlapping[n];
    memset(overlapping, 0, sizeof(overlapping));
    int dx[n];
    memset(dx, 0, sizeof(dx));
    int pos = 0;
    int maxval = 0;
    int numon = 0;
    for(int i = -1000 ; i <= 1000 ; i++) {
        while(pos != v.size()-1 && v[pos].first <= i + x - 1) {
            if(v[pos].second.second == 1) {
                dx[v[pos].second.first]++;
                numon++;
            }else if(v[pos].second.second == -2){
                dx[v[pos].second.first]-= 2;
            }else {
                numon --;
                dx[v[pos].second.second ] = 0;
            }
            pos++;
        }
        for(int j = 0; j < n; j++) {
            overlapping[j] += dx[j];
        }
        int total = 0;
        for(int j = 0; j < n; j++) {
            total += min(overlapping[j], crime[j]);
        }
        if(numon <= k) {
            maxval = max(maxval, total);
        }
    }
    cout<<maxval<<'\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...