Submission #1214288

#TimeUsernameProblemLanguageResultExecution timeMemory
1214288NeltHieroglyphs (IOI24_hieroglyphs)C++20
3 / 100
423 ms28716 KiB
#include "hieroglyphs.h"
#include <bits/stdc++.h>
#define ll long long
#define endl "\n"
using namespace std;

std::vector<int> ucs(std::vector<int> a, std::vector<int> b)
{
    {
        set<ll> sa, sb;
        for (ll i : a)
            sa.insert(i);
        for (ll i : b)
            sb.insert(i);
        vector<int> nv;
        for (ll i : a)
            if (sb.count(i))
                nv.push_back(i);
        a = nv;
        nv.clear();
        for (ll i : b)
            if (sa.count(i))
                nv.push_back(i);
        b = nv;
    }
    vector<int> ans, ans1;
    set<ll> s;
    for (ll i : a)
        if (!s.count(i))
            ans.push_back(i), s.insert(i);
    s.clear();
    map<ll, ll> first, last, cnt;
    for (ll i : a)
        cnt[i]++;
    for (ll i = 0; i < b.size(); i++)
        if (!s.count(b[i]))
            ans1.push_back(b[i]), s.insert(b[i]), first[b[i]] = i;
        else
            last[b[i]] = i;
    if (ans != ans1)
        return {-1};
    s.clear();
    vector<ll> event[a.size() + 1];
    for (ll i = 0; i < a.size(); i++)
        if (s.count(a[i]))
            event[i + 1].push_back(last[a[i]]);
        else if (cnt[a[i]] == 2)
            event[i].push_back(last[a[i]]), s.insert(a[i]);
    s.clear();
    for (ll i = 0; i < a.size(); i++)
    {
        for (ll j : event[i])
            if (s.count(j))
                s.erase(j);
            else
                s.insert(j);
        auto [l, r] = array<ll, 2>{first[a[i]], last[a[i]]};
        auto it = s.lower_bound(l);
        if (it != s.end() and *it <= r)
            return {-1};
    }
    return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...