样例没过
#include<bits/stdc++.h>
using namespace std;
struct node{
int lson, rson;
int Left, Right;
int tag, sum;
}tree[600010];
int tot = 0;
void freetag(int index) {
int lson = tree[index].lson;
int rson = tree[index].rson;
int Right = tree[index].Right;
int Left = tree[index].Left;
if(tree[index].tag == 1) {
tree[lson].tag = 1;
tree[rson].tag = 1;
tree[index].tag = 0;
tree[index].sum = Right-Left+1;
} else if(tree[index].tag == 2){
tree[lson].tag = 2;
tree[rson].tag = 2;
tree[index].tag = 0;
tree[index].sum = 0;
}
}
void add(int &index, int l, int r, int left, int right, int k) {
// cout<<l<<" " <<r<<" "<<left<<" " <<right<<"debug"<<endl;
if(!index) {
index = ++tot;
tree[index].Left = l;
tree[index].Right = r;
}
freetag(index);
if(l >= left && r <= right) {
if(k==1) tree[index].tag = 2;
else tree[index].tag = 1;
return;
}
if(l > right || r < left) {
return;
}
int mid = l + r >> 1;
add(tree[index].lson, l, mid, left, right, k);
add(tree[index].rson, mid+1, r, left, right, k);
freetag(tree[index].lson);
freetag(tree[index].rson);
tree[index].sum = tree[tree[index].lson].sum + tree[tree[index].rson].sum;
}
int main() {
int n, q; cin >> n >> q;
int root = 0;
add(root, 1, n, 1, n, 2);
// if(tree[root].tag) freetag(root);
// cout << tree[root].sum << endl;
for(int i=1; i<=q; ++i) {
int l, r, k; cin >> l >> r >> k;
add(root, 1, n, l, r, k);
if(tree[root].tag) freetag(root);
cout << tree[root].sum << endl;
}
return 0;
}