답안 #1103835

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1103835 2024-10-22T01:35:27 Z haianhnguyen08102007 Fuel Station (NOI20_fuelstation) C++17
26 / 100
347 ms 60716 KB
#include <bits/stdc++.h>

using namespace std;

vector <pair <long long, long long>> vec;

struct node
{
    long long s, e, m;
    long long mn, lz;

    node *l, *r;
    node (long long _s, long long _e) : s(_s), e(_e), m((_s+_e)/2), lz(0)
    {
        if (s==e)
        {
            mn-= vec[s].first;
            return;
        }
        l=new node(s, m);
        r=new node(m+1, e);
        mn=min(l->mn, r->mn);
    }

    void prop()
    {
        l->update(s, m, lz);
        r->update(m+1, e, lz);
        lz = 0;
        mn=min(l->mn, r->mn);
    }

    void update(long long x, long long y, long long v)
    {
        if (x > y) return;
        if (x<=s && y>=e)
        {
            mn+=v; lz+=v; return;
        }
        if (lz!=0) prop();
        if (x<=m) l->update(x, y, v);
        if (y>=m+1) r->update(x, y, v);
        mn=min(l->mn, r->mn);
    }
};

int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

//    freopen("FFUEL.INP", "r", stdin);
//    freopen("FFUEL.OUT", "w", stdout);

    long long n, d, x, a, b, ans;
    vector <tuple <long long, long long, long long>> vec2;

    cin>>n>>d;
    ans=d;
    for (long long i=0; i<n; i++)
    {
        cin>>x>>a>>b;
        vec.emplace_back(x, i);
        vec2.emplace_back(b, a, x);
    }

    vec.emplace_back(d, n);
    vec2.emplace_back(2000000000, 0, d);

    sort(vec.begin(), vec.end());

    long long cnt = n+1;
    for (long long i=n; i>=0; i--)
    {
        if (i!=n && vec[i].first != vec[i+1].first) cnt = i+1;
        get<2>(vec2[vec[i].second]) = cnt;
    }

    sort(vec2.begin(), vec2.end());

    node *root = new node(0, n);
    for (long long i = 0; i<n; i++)
    {
        root->update(get<2>(vec2[i]), n, get<1>(vec2[i]));
    }

    long long left = 0;
    for (long long i = 0; i<=n; i++)
    {
        root->update(0, n, get<0>(vec2[i]) - (i==0 ? 0 : get<0>(vec2[i-1])));
        if (i<n-1 && get<0>(vec2[i])==get<0>(vec2[i+1])) continue;
        while (get<0>(vec2[left]) != get<0>(vec2[i]))
        {
            root->update(get<2>(vec2[left]), n, -get<1>(vec2[left]));
            left++;
        }
        if (root->mn < 0) continue;
        ans=min(ans, get<0>(vec2[i]) - root->mn);
    }

    cout<<ans;

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 460 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 592 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 456 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 347 ms 60716 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Incorrect 8 ms 2060 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Incorrect 8 ms 2060 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 460 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 592 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 456 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 336 KB Output is correct
17 Correct 1 ms 336 KB Output is correct
18 Correct 1 ms 336 KB Output is correct
19 Correct 1 ms 460 KB Output is correct
20 Correct 1 ms 336 KB Output is correct
21 Correct 1 ms 336 KB Output is correct
22 Correct 1 ms 336 KB Output is correct
23 Correct 1 ms 336 KB Output is correct
24 Correct 1 ms 336 KB Output is correct
25 Correct 1 ms 336 KB Output is correct
26 Correct 1 ms 336 KB Output is correct
27 Correct 1 ms 336 KB Output is correct
28 Correct 1 ms 460 KB Output is correct
29 Correct 1 ms 336 KB Output is correct
30 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 460 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 592 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 456 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 336 KB Output is correct
17 Incorrect 8 ms 2060 KB Output isn't correct
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 460 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 592 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 456 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Incorrect 347 ms 60716 KB Output isn't correct
17 Halted 0 ms 0 KB -