关于ODT
查看原帖
关于ODT
250493
sssaberrrr楼主2021/10/3 18:55

是不是因该卡ODT(雾

#include<bits/stdc++.h>
#define si set<stu>::iterator

using namespace std;

struct stu{
	int l, r;
	mutable int val;
	
	bool operator<(const stu &a) const {return l < a.l;}
	
	stu(int L, int R, int Val):l(L), r(R), val(Val){};
	stu(int L):l(L){};
};

set<stu> s;

si split(int pos)
{
	si it = s.lower_bound(stu(pos));
	if(it!=s.end() && it->l==pos) return it;
	
	it--;
	int l=it->l, r=it->r, val=it->val;
	s.erase(it);
	s.insert(stu(l, pos-1, val));
	return s.insert(stu(pos, r, val)).first;
}

void assign(int l, int r, int val)
{
	si itr=split(r+1), itl=split(l);
	s.erase(itl, itr);
	s.insert(stu(l, r, val));
}

int n, m;

int main()
{
	scanf("%d%d", &n, &m);
	
	s.insert(stu(0, n, 1));
	for(int i=1; i<=m; i++)
	{
		int x, y;
		scanf("%d%d", &x, &y);
		
		assign(x, y, 0);
	}
	
	int ans = 0;
	for(si it=s.begin(); it!=s.end(); it++)
		ans += it->val==1?it->r-it->l+1:0;
	
	printf("%d", ans);
	
    return 0;
}
2021/10/3 18:55
加载中...