Untitled

 avatar
unknown
c_cpp
6 months ago
4.0 kB
3
Indexable
#include <bits/stdc++.h>   //───▐▀▄──────▄▀▌───▄▄▄▄▄▄▄
#define ll long long       //───▌▒▒▀▄▄▄▄▀▒▒▐▄▀▀▒██▒██▒▀▀▄•.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯
#define f first            //──▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▀▄•.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯
#define s second           //──▌▒▒▒▒▒▒▒▒▒▒▒▒▒▄▒▒▒▒▒▒▒▒▒▒▒▒▒▀▄•.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯
#define pb push_back       //▀█▒▒█▌▒▒█▒▒▐█▒▒▀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▌•.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯
#define ub upper_bound     //▀▌▒▒▒▒▒▀▒▀▒▒▒▒▒▀▀▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▐ ▄▄•.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯
#define lb lower_bound     //▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▄█▒█•.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯
#define np next_permutation//▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▀•.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯
#define us unordered_set   //──▐▄▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▄▌•.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯
#define cont continue     //────▀▄▄▀▀▀▀▄▄▀▀▀▀▀▀▄▄▀▀▀▀▀▀▄▄▀•.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯ •.,¸,.•*`•.,¸¸,.•*¯
#define IOS ios_base::sync_with_stdio(0),cin.tie(0)
#define INF INFINITY
#define ull unsigned long long
#define maxel(begin, end) *std::max_element(begin, end)
#define minel(begin, end) *std::min_element(begin, end)
using namespace std;
//*  fin fin fin *//
//*  fin fin fin  *//
//*  fin fin fin  *//
//*  fin fin fin  *//
//*   travske skot  *//
ll MAXN = 3*1e7;

vector<ll> t(MAXN, -1);
vector<bool> marked(MAXN, 0);
struct node{
    ll l, r, x;
};
void push(ll v) {
    if (marked[v]) {
        t[2 * v] = t[2 * v + 1] = t[v];
        t[v] = -1;        
        marked[2 * v] = marked[2 * v + 1] = true;
        marked[v] = false;
    }
}

void upd(ll v, ll tl, ll tr, ll l, ll r, ll x) {
    if (l > r) return;

    if (l == tl && r == tr/* && tl != x*/) {
        t[v] = x;
        marked[v] = true;
    } else {
        ll tm = (tl + tr) / 2;
        push(v);
        upd(2 * v, tl, tm, l, min(r, tm), x);
        upd(2 * v + 1, tm + 1, tr, max(l, tm + 1), r, x);
    }
}

void get(ll v, ll tl, ll tr, ll p) {
    if (t[v] > -1) {
        cout << t[v] << ' ';
        return;
    }

    if (tl == tr) return;

    ll tm = (tl + tr) / 2;

    if (p <= tm)
        get(2 * v, tl, tm, p);
    else
        get(2 * v + 1, tm + 1, tr, p);
}

void sett(ll v, ll tl, ll tr, ll p) {
    if (tl == tr) {
        t[v] = 0;
        return;
    }

    ll tm = (tl + tr) / 2;

    if (p <= tm)
        sett(2 * v, tl, tm, p);
    else
        sett(2 * v + 1, tm + 1, tr, p);
}
int main() {
    IOS;
    ll n, m;
    cin >> n >> m;

    vector<node> tests(3*m);

    for (ll i = 1; i <= m; i++) {
        cin >> tests[i].l >> tests[i].r >> tests[i].x;
    }

    for (ll i = m; i > 0; i--) {
        upd(1, 1, n, tests[i].x+1, tests[i].r, tests[i].x);
        upd(1, 1, n, tests[i].l, tests[i].x-1, tests[i].x);
    }
    sett(1,1,n,tests[m].x);
    
    for (ll i = 1; i <= n; i++) {
        get(1, 1, n, i);
    }

}
Editor is loading...
Leave a Comment