제출 #572441

#제출 시각아이디문제언어결과실행 시간메모리
572441MadokaMagicaFanRoller Coaster Railroad (IOI16_railroad)C++14
컴파일 에러
0 ms0 KiB
#include "bits/stdc++.h"

using namespace std;

using ll = long long;
const ll inf = 1e9;
const int md1 = 1e9+7;
const int md2 = 998244353;

#define all(v)                      v.begin(), v.end()
#define rall(v)                     v.rbegin(), v.rend()
#define sz(v)                       ((int)v.size())

#define forn(i,n)                   for(int i = 0; i < n; ++i)
#define forbe(i,b,e)                for(int i = b; i < e; ++i)

#define pb                          push_back

#define pry                         puts("YES")
#define prn                         puts("NO")
#define endl                        '\n'

#define fst                         first
#define scn                         second

template<typename T>
struct BIT{
    int n;
    vector<T> fen;
    BIT(int n){
        this->n = n;
        fen.assign(n,0);
    }
    BIT(vector<T> a) : BIT(a.size()){
        for(int i = 0; i < n; ++i) add(i,a[i]);
    }
    void add(int x, T v){
        for(; x < n; x |= x+1) fen[x] += v;
    }
    T query(int x){
        T res = 0;
        for(; x >= 0; x = (x&(x+1))-1)
            res += fen[x];
        return res;
    }
    T query(int l, int r){
        return query(r) - query(l-1);
    }
};

long int
plan_roller_coster(vector<int> s, vector<int> t)
{
    int n = sz(s);
    BIT<int> tr(2*n+1);
    BIT<int> trn(2*n+1);
    map<int,int> mp;
    vector<int> vals;

    for (int i = 0; i < n; ++i) {
        vals.pb(s[i]);
        vals.pb(t[i]);
    }

    sort(vals.begin(), vals.end());
    vals.resize(distance(vals.begin(),unique(vals.begin(), vals.end())));

    for (int i = 0; i < sz(vals); ++i) {
        mp[vals[i]] = i;
    }

    for (int i = 0; i < n; ++i) {
        s[i] = mp[s[i]];
        t[i] = mp[t[i]];
    }


    for (int i = 0; i < n; ++i) {
        tr.add(t[i],1);
    }

    vector<pair<int,int>> arr;

    for (int i = 0; i < n; ++i) {
        arr.pb({s[i],i});
    }

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


    bool fnd = 0;
    int cnt = 0;
    for (int i = 0; i < n; ++i) {
        trn.add(t[i],1);
        ++cnt;

        int qr = tr.query(s[i]);

        if (qr > cnt)
            continue;

        if (qr < cnt-2)
            return 1;

        if (qr == cnt-1) {
            if (qr <= trn.query(s[i]))
                return 1;
            if (fnd)
                return 1;
            fnd = 1;
            --cnt;
            continue;
        }

        if (qr == cnt) {
            if (qr > trn.query(s[i])) continue;
            if (i == n-1) continue;
            if (fnd) return 1;
            fnd = 1;
            --cnt;
            continue;
        }
    }

    return 0;
}

#ifdef ONPC
void
solve()
{
    int n;
    cin >> n;

    vector<int> s(n);
    for (int i = 0; i < n; ++i)
        cin >> s[i];
    
    vector<int> t(n);
    for (int i = 0; i < n; ++i)
        cin >> t[i];
    
    cout << plan_roller_coster(s,t) << endl;
}

int32_t
main()
{
    freopen("in", "r", stdin);
    int t = 1;
    /* cin >> t; */
    while(t--)
        solve();
}
#endif

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccxTAg98.o: in function `main':
grader.cpp:(.text.startup+0xf4): undefined reference to `plan_roller_coaster(std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status