#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
#include <unordered_map>
#include <stack>
#include <bitset>
#include <string>
#include <cstring>
#include <iterator>
#include <random>
#define ll long long
#define ld long double
#define inf (ll)(2*1e18)
#define sort(a) sort(a.begin(), a.end())
#define reverse(a) reverse(a.begin(), a.end())
#define pb push_back
#define endl "\n"
using namespace std;
void build(ll id, ll l, ll r, vector<ll>& a, vector<ll>& b){
    if(l == r){
        b[id] = a[l];
        return;
    }
    ll m = (l+r)/2;
    build(2*id, l, m, a, b);
    build(2*id+1, m+1, r, a, b);
    b[id] = min(b[2*id], b[2*id+1]);
}
ll get(ll id, ll l, ll r, ll tl, ll tr, vector<ll>& b){
    if(r < tl or tr < l) return inf;
    if(tl <= l and r <= tr){
        return b[id];
    }
    ll m = (l+r)/2;
    return min(get(2*id, l, m, tl, tr, b), get(2*id+1, m+1, r, tl, tr, b));
}
bool check(ll n, vector<ll>& ans, vector<vector<pair<ll, ll>>>& a){
    vector<ll> b(4*n);
    build(1, 0, n-1, ans, b);
    for(int i=0;i<n;++i){
        for(auto [l, r]: a[i]){
            if(get(1, 0, n-1, l, r, b) != i){
                return false;
            }
        }
    }
    return true;
}
pair<ll, ll> lower(pair<ll, ll> a, pair<ll, ll> b){
    return {max(a.first, b.first), min(a.second, b.second)};
}
void solve(){
    ll n, q, i, l, r, res, x;
    cin>>n>>q;
    vector<vector<pair<ll, ll>>> a(n);
    vector<set<ll>> b(n);
    vector<vector<ll>> open(n);
    vector<vector<ll>> close(n);
    vector<ll> ans(n);
    multiset<ll> s;
    set<ll> left;
    for(i=0;i<q;++i){
        cin>>l>>r>>res;
        a[res].pb({l, r});
        open[l].pb(res);
        close[r].pb(res);
    }
    s.insert(0);
    for(i=0;i<n;++i){
        left.insert(i);
        for(auto el: open[i]){
            s.insert(el);
        }
        ans[i] = *s.rbegin();
        for(auto el: close[i]){
            s.erase(s.find(el));
        }
    }
    if(check(n, ans, a)){
        for(i=0;i<n;++i){
            b[ans[i]].insert(i);
            ans[i] = -1;
        }
        for(i=0;i<n;++i){
            pair<ll, ll> p = {-1, n};
            for(auto el: a[i]){
                p = lower(p, el);
            }
            if(p.first != -1){
                if(p.second < p.first){
                    for(i=0;i<n;++i){
                        cout<<-1<<' ';
                    }
                    cout<<endl;
                    return;
                }
                if(b[i].lower_bound(p.first) == b[i].end()){
                    for(i=0;i<n;++i){
                        cout<<-1<<' ';
                    }
                    cout<<endl;
                    return;
                }
                x = *b[i].lower_bound(p.first);
                if(x > p.second){
                    for(i=0;i<n;++i){
                        cout<<-1<<' ';
                    }
                    cout<<endl;
                    return;
                }
                b[i].erase(x);
                ans[x] = i;
                left.erase(i);
            }
        }
        for(i=n-1;i>=0;--i){
            for(auto el: b[i]){
                if(*left.rbegin() < i){
                    for(i=0;i<n;++i){
                        cout<<-1<<' ';
                    }
                    cout<<endl;
                    return;
                }
                ans[el] = *left.rbegin();
                left.erase(*left.rbegin());
            }
        }
        for(i=0;i<n;++i){
            cout<<ans[i]<<' ';
        }
        cout<<endl;
    }else{
        for(i=0;i<n;++i){
            cout<<-1<<' ';
        }
        cout<<endl;
    }
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    srand(time(nullptr));
    ll t=1;
//    cin>>t;
    for(;t>0;--t){
        solve();
    }
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |