蒟蒻第一次写这东西……
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=15001000;
struct Node{
int l,r,v;
Node(int l=-1,int r=-1,int v=0):l(l),r(r),v(v){}
bool operator<(const Node n) const{
return l<n.l;
}
};
set<Node> st;
int sum=0;
int n;
using It=set<Node>::iterator;
It split(int pos){
if(pos>n) return st.end();
auto it=st.lower_bound(Node(pos));
if(it!=st.end()&&it->l==pos) return it;
it--;
Node tmp=*it;
st.erase(it);
st.insert(Node(tmp.l,pos-1,tmp.v));
return st.insert(Node(pos,tmp.r,tmp.v)).first;
}
void assign(int l,int r,int v){
auto itr=split(r+1),itl=split(l);
for(It bzd=itl;bzd!=itr;bzd++){
sum-=(bzd->v)*(bzd->r-bzd->l+1);
}
st.erase(itl,itr);
st.insert(Node(l,r,v));
sum+=v*(r-l+1);
}
int main()
{
int q;
cin>>n>>q;
st.insert(Node(1,n));
while(q--){
int a,b,c;
cin>>a>>b>>c;
assign(a,b,!(c-1));
cout<<n-sum<<endl;
}
}
是set多了个log的问题吗?(不会吧)