珂朵莉树TLE on #18
查看原帖
珂朵莉树TLE on #18
325243
DEMAC楼主2022/8/16 10:22

蒟蒻第一次写这东西……

#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的问题吗?(不会吧)

2022/8/16 10:22
加载中...