Submission #1193749

#TimeUsernameProblemLanguageResultExecution timeMemory
1193749chaeryeongHandcrafted Gift (IOI20_gift)C++20
100 / 100
229 ms27812 KiB
#include "gift.h"
#include <bits/stdc++.h>
using namespace std;
int construct(int n, int r, std::vector<int> a, std::vector<int> b, std::vector<int> x) {
    vector <pair <int, int>> ee, ff;
    for (int i = 0; i < r; i++) {
        if (x[i] == 1) {
            ee.push_back({a[i], b[i]});
        } else {
            ff.push_back({a[i], b[i]});
        }
    }
    for (int i = 0; i < n; i++) {
        ee.push_back({i, i});
    }
    {
        sort(ee.begin(), ee.end());
        auto g = ee; ee.clear();
        for (auto i : g) {
            if (ee.empty() || ee.back().second < i.first) {
                ee.push_back(i);
            }
            ee.back().second = max(ee.back().second, i.second);
        }
    }
    string s;
    for (int i = 0; i < n; i++) {
        s += 'R';
    }
    int v = 0;
    for (int i = 1; i < (int)ee.size(); i++) {
        if (ee[i].first == ee[i - 1].second + 1) {
            v ^= 1;
        } else {
            for (int j = ee[i - 1].second + 1; j < ee[i].first; j++) {
                s[j] = (v == 1 ? 'R' : 'B');
            }
        }
        for (int j = ee[i].first; j <= ee[i].second; j++) {
            s[j] = (v == 0 ? 'R' : 'B');
        }
    }

    for (auto [x, y] : ff) {
        auto g = lower_bound(ee.begin(), ee.end(), pair <int, int> {x + 1, 0}) - ee.begin();
        if (g != 0) {
             g--;  
           if (ee[g].first <= x && y <= ee[g].second) {
                return 0;
            }
        }
    }
    craft(s); return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...