#include<bits/stdc++.h>
#define int long long
#define _for(i, a, b) for(int i = a;i < b;++i)
#define _rep(i, a, b) for(int i = a;i <= b;++i)
int readll(){int x; scanf("%lld", &x); return x;}
using namespace std;
#define INF 0x3f3f3f3f
typedef struct node{
int left, right;
node *next;
} *linklist;
signed main(){
int L, M;
cin>>L>>M;
linklist pnode = new node;
pnode -> next = NULL;
while(M--){
node * temp = new node;
temp -> left = readll();
temp -> right = readll();
temp -> next = NULL;
if(pnode -> next == NULL){
pnode -> next = temp;
continue;
}
node * t = pnode -> next;
node * p = pnode;
while(t != NULL && t -> left < temp -> left){
p = t;
t = t -> next;
}
p -> next = temp;
temp -> next = t;
}//insert
node * temp = pnode -> next;
/*
cout<<endl;
while(temp != NULL){
cout<<temp -> left<<' '<<temp -> right<<endl;
temp = temp -> next;
}//traversal
*/
temp = pnode -> next;
while(temp -> next != NULL){
node * t = temp -> next;
if(temp -> right >= t -> left){
if(temp -> right < t -> right) temp -> right = t -> right;
temp -> next = t -> next;
delete t;
continue;
}
temp = t;
}//merge
/*
cout<<endl;
temp = pnode -> next;
while(temp != NULL){
cout<<temp -> left<<' '<<temp -> right<<endl;
temp = temp -> next;
}//traversal
*/
int total = 0;
temp = pnode -> next;
while(temp != NULL){
total += (temp -> right) - (temp -> left) + 1;
temp = temp -> next;
}
cout<<L + 1 - total;
return 0;
}
建一个链表实现插入合并后,再把所有并区间累加起来减掉就好了



京公网安备 11010502036488号