Submission #1355653

#TimeUsernameProblemLanguageResultExecution timeMemory
1355653bakhtiyarnSegments (IZhO18_segments)C++20
7 / 100
5094 ms6464 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 3e5+5;
array<int, 2> id[N];

multiset<array<int, 2>> all;

void add(int l, int r){
    all.insert({l, r});
}
void remove(int l, int r){
    all.erase(all.find({l, r}));
}

int cnt(int l, int r){
    int ans = 0;
    for(auto [L, R]: all){
        if(L <= l and R >= r) ans++;
    }
    return ans;
}

int cnt_sz(int l, int r, int k){
    int ans = 0;
    for(auto [L, R]: all){
        if(L < l) continue;
        if(L > r) continue;
        if((R-L+1) < k) continue;
        ans++;
    }
    return ans;
}

// for(int i=1; i<=n; i++)
void solve(){
    int q, t; cin >> q >> t;
    int ID = 1;
    
    int last = 0;
    while(q--){
        int tip, l, r, k; cin >> tip;
        // for(auto [L, R]: all) cout << L << " " << R << endl;
        // cout << endl;
        // cout << endl;
        
        if(tip == 1){
            int a, b; cin >> a >> b;
            l = a ^ (t * last);
            r = b ^ (t * last);
            if(l > r) swap(l, r);
            add(l, r);
            id[ID++] = {l, r};
            continue;
        }
        if(tip == 2){
            int rem; cin >> rem;
            l = id[rem][0];
            r = id[rem][1];
            remove(l, r);
            continue;
        }

        int a, b; cin >> a >> b >> k;
        l = a ^ (t * last);
        r = b ^ (t * last);
        if(l > r) swap(l, r);

        if(r-l+1 < k) {
            last = 0;
            cout << last << '\n';
            continue;
        }
        last = 0;

        last += cnt(l-1, l+k-1);
        last += cnt(r-k+1, r+1);
        last -= cnt(l-1, r+1);

        last += cnt_sz(l, r-k+1, k) - cnt(r-k+1, r+1) + cnt(l-1, r+1);
        cout << last << '\n';
    }
}

signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...