Untitled

 avatar
unknown
plain_text
a year ago
1.3 kB
12
Indexable
#include<iostream>
#include <bits/stdc++.h>

#define ll long long
#define ld long double
#define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int N = 3e5 + 6, mod = 1e9 + 7;
using ii = pair<int, int>;

vector<ii> ranges;
set<ii> cache;
int go[N];
int n, q;
const int BLK = 450;
void build() {
    for(auto x : cache) go[x.first] = max(go[x.first], x.second);
    for(int i = 1; i <= n; i++) go[i] = max(go[i-1], go[i]);
    cache.clear();
}
void doWork() {
    cin >> n >> q;
    for(int i = 0; i < q; i++) {
        int tp, l, r;
        cin >> tp >> l >> r;
        if(tp==1) cache.insert({l, r});
        else {
            int cur = l, ans = 0;
            auto it = cache.begin();
            while (cur <= r) {
                int mx = go[cur];
                while (it != cache.end() && it->first <= cur) mx = max(mx, it->second), it++;
                if(mx < cur) {
                    ans = -1;
                    break;
                }
                ans += 1;
                cur = mx + 1;
            }
            cout << ans << '\n';
        }

        if(cache.size() == BLK) build();
    }
}

int main() {
    IO
    int t = 1;

//    cin >> t;

//    return 0;
    for (int i = 1; i <= t; i++) {
        //  cout << "Case #" << i << ": ";
        doWork();
    }
}
// 6 4 3 1 2
Editor is loading...
Leave a Comment