提出 #65934811


ソースコード 拡げる

#include <bits/stdc++.h>

#define ll long long
#define ld long double
#define pb push_back
#define all(x) x.begin(), x.end()
#define ca(x) for(auto i:x) cout<<i<<" ";
#define nl cout<<"\n";
#define f first 
#define s second

using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);

    int n; cin>>n;
    int l[n], r[n]; ll ar[n];
    for(int i=0; i<n; i++) cin>>ar[i];
    for(int i=0; i<n; i++) cin>>l[i]>>r[i], l[i]--, r[i]--;
    int q; cin>>q;
    auto does_intersect = [&](int i, int j) -> bool {
        if(l[i] > r[j] || l[j] > r[i]) return 0;
        return 1;
    };
    vector<ll> best_end(2*n,1e16);
    vector<ll> best_start(2*n,1e16);
    for(int i=0; i<n; i++) {
        best_end[r[i]] = min(best_end[r[i]], ar[i]);
        best_start[l[i]] = min(best_start[l[i]], ar[i]);
    }
    for(int i=1; i<2*n; i++) {
        best_end[i] = min(best_end[i], best_end[i-1]);
        best_start[2*n-i-1] = min(best_start[2*n-i-1], best_start[2*n-i]);
    }

    auto get_best_start = [&](int i) -> ll { 
        if(i+1 >= 2*n) return 1e16;
        return best_start[i+1];
    };
    auto get_best_end = [&](int i) -> ll { 
        if(i-1 < 0) return 1e16;
        return best_end[i-1];
    };
    while(q--){
        int a, b;
        cin>>a>>b; a--; b--;
        if(!does_intersect(a,b)) {
            cout<<ar[a]+ar[b]<<"\n";
        } else {
            ll res = 1e16;
            res = min(res, ar[a]+ar[b]+get_best_start(r[a])+get_best_end(l[b]));
            res = min(res, ar[a]+ar[b]+get_best_start(r[b])+get_best_end(l[a]));
            res = min(res, ar[a]+ar[b]+get_best_start(max(r[b],r[a])));
            res = min(res, ar[a]+ar[b]+get_best_end(min(l[b],l[a])));
            if(res == 1e16) cout<<-1<<"\n";
            else cout<<res<<"\n";
        }
    }

}

提出情報

提出日時
問題 A - Complement Interval Graph
ユーザ keepers
言語 C++ 20 (gcc 12.2)
得点 700
コード長 1856 Byte
結果 AC
実行時間 74 ms
メモリ 12628 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 700 / 700
結果
AC × 2
AC × 26
セット名 テストケース
Sample example0.txt, example1.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, example0.txt, example1.txt
ケース名 結果 実行時間 メモリ
000.txt AC 68 ms 12536 KiB
001.txt AC 59 ms 12568 KiB
002.txt AC 62 ms 12488 KiB
003.txt AC 71 ms 12492 KiB
004.txt AC 74 ms 12544 KiB
005.txt AC 71 ms 12568 KiB
006.txt AC 71 ms 12476 KiB
007.txt AC 71 ms 12476 KiB
008.txt AC 62 ms 12504 KiB
009.txt AC 43 ms 6740 KiB
010.txt AC 39 ms 8868 KiB
011.txt AC 41 ms 10028 KiB
012.txt AC 21 ms 3780 KiB
013.txt AC 34 ms 9044 KiB
014.txt AC 74 ms 12580 KiB
015.txt AC 74 ms 12544 KiB
016.txt AC 74 ms 12520 KiB
017.txt AC 74 ms 12544 KiB
018.txt AC 73 ms 12476 KiB
019.txt AC 74 ms 12540 KiB
020.txt AC 74 ms 12500 KiB
021.txt AC 73 ms 12628 KiB
022.txt AC 73 ms 12488 KiB
023.txt AC 74 ms 12488 KiB
example0.txt AC 1 ms 3596 KiB
example1.txt AC 1 ms 3384 KiB