답안 #241929

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
241929 2020-06-26T11:11:19 Z osaaateiasavtnl Railway Trip (JOI17_railway_trip) C++17
0 / 100
2000 ms 8044 KB
#include<bits/stdc++.h>
using namespace std;
#define ii pair <int, int>
#define app push_back
#define all(a) a.begin(), a.end()
#define bp __builtin_popcountll
#define ll long long
#define mp make_pair
#define f first
#define s second
#define Time (double)clock()/CLOCKS_PER_SEC

const int N = 1e5+7;
int a[N];
vector <int> g[N];
int d[N];

int dist(int S, int T) {
    for (int i = 0; i < N; ++i)
        d[i] = N;
    d[S] = 0;
    queue <int> q; q.push(S);
    while (q.size()) {
        int u = q.front(); q.pop();
        if (u == T)
            return d[u];

        for (int v : g[u])
            if (d[u]+1 < d[v]) {
                d[v] = d[u]+1;
                q.push(v);
            }   
    }   
    cout << "LMAO" << endl;
    exit(1);
}   

signed main() {
    #ifdef HOME
    freopen("input.txt", "r", stdin);
    #else
    #define endl '\n'
    ios_base::sync_with_stdio(0); cin.tie(0);
    #endif

    int n, k, q;
    cin >> n >> k >> q;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];

    while (q--) {
        int l, r;
        cin >> l >> r;
        if (r < l)  
            swap(l, r);
    
        if (l == r) {
            cout << 0 << endl;
            continue;
        }                   

        vector <int> p = {l, r};

        {
        int mx = a[l];
        for (int i = l-1; i; --i) {
            if (a[i] >= mx) {
                p.app(i);
                mx = a[i];
            }   
        }
        }   

        if (l + 1 < r) {
            int pos = l+1;
            for (int i = l + 1; i < r; ++i) 
                if (a[i] > a[pos])  
                    pos = i;
            int mx = a[l];
            for (int i = l + 1; i < pos; ++i) {
                if (a[i] >= mx) {
                    p.app(i);
                    mx = a[i];
                }   
            }   
            mx = a[r];
            for (int i = r - 1; i > pos; --i) {
                if (a[i] >= mx) {
                    p.app(i);
                    mx = a[i];
                }   
            }   
            p.app(pos);
        }   

        {
        int mx = a[r];
        for (int i = r + 1; i <= n; ++i) {
            if (a[i] >= mx) {
                p.app(i);
                mx = a[i];
            }   
        }
        }

        sort(all(p));

        /*
        cout << "p : ";
        for (auto e : p)
            cout << e << ' ';
        cout << endl;
        exit(0);
        */

        int u = -1, v = -1;
        for (int i = 0; i < p.size(); ++i) {
            if (p[i] == l) {
                u = i;
            }   
            if (p[i] == r) {
                v = i;
            }   
        }   

        for (int i = 0; i < N; ++i)
            g[i].clear();

        for (int i = 0; i < p.size(); ++i) {
            for (int j = i - 1; j >= 0; --j) {
                if (a[p[j]] >= a[p[i]]) {
                    g[i].app(j);
                    g[j].app(i);
                    break;
                }   
            }   
            for (int j = i + 1; j < p.size(); ++j) {
                if (a[p[j]] >= a[p[i]]) {
                    g[i].app(j);
                    g[j].app(i);
                    break;
                }   
            }   
        }   

        cout << dist(u, v) - 1 << endl;
    }   
}
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 3072 KB Output is correct
2 Incorrect 11 ms 3140 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 3072 KB Output is correct
2 Correct 92 ms 4036 KB Output is correct
3 Correct 64 ms 3712 KB Output is correct
4 Correct 51 ms 3584 KB Output is correct
5 Correct 44 ms 3456 KB Output is correct
6 Correct 42 ms 3456 KB Output is correct
7 Correct 42 ms 3456 KB Output is correct
8 Correct 558 ms 7644 KB Output is correct
9 Execution timed out 2089 ms 8044 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2059 ms 4012 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2086 ms 3580 KB Time limit exceeded
2 Halted 0 ms 0 KB -