是不是因该卡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;
}