Submission #1249028

#TimeUsernameProblemLanguageResultExecution timeMemory
1249028vicvicRMQ (NOI17_rmq)C++20
100 / 100
51 ms11440 KiB
#include <bits/stdc++.h>

using namespace std;
const int NMAX=2e5;
int n, q, l[NMAX+5], r[NMAX+5], l2[NMAX+5], r2[NMAX+5], ans[NMAX+5];
void blud ()
{
    for (int i=0;i<n;i++)
    {
        cout << "-1 ";
    }
    exit (0);
}
int main ()
{
    ios_base :: sync_with_stdio (0);
    cin.tie (nullptr);
    cin >> n >> q;
    for (int i=0;i<n;i++)
        r2[i]=l[i]=-1, l2[i]=r[i]=1e9;
    while (q--)
    {
        int x, y, val;
        cin >> x >> y >> val;
        l[val]=max (l[val], x);
        r[val]=min (r[val], y);
        l2[val]=min (l2[val], x);
        r2[val]=max (r2[val], y);
    }
    set <int> pos, cows;
    for (int i=0;i<n;i++)
        pos.insert (i), cows.insert (i);
    for (int i=n-1;i>=0;i--)
    {
        if (l[i]==-1)
            continue;
        auto itr=pos.lower_bound (l[i]);
        if (itr==pos.end() || (*itr)>r[i])
            blud ();
        ans[*itr]=i;
        pos.erase (*itr);
        cows.erase (i);
        while (pos.size())
        {
            auto itr=pos.lower_bound (l2[i]);
            if (itr==pos.end() || (*itr)>r2[i])
                break;
            int x=*cows.rbegin();
            if (x<i)
                blud ();
            ans[*itr]=x;
            pos.erase (itr);
            cows.erase (x);
        }
    }
    while (pos.size())
    {
        ans[*pos.begin()]=*cows.begin();
        pos.erase (pos.begin());
        cows.erase (cows.begin());
    }
    for (int i=0;i<n;i++)
        cout << ans[i] << " ";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...