您为什么不老老实实地写一个区间合并呢?
by IAWNA @ 2022-09-25 17:55:45
```cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5;
struct node{
ll l, r;
} a[N+5],b[N+5];
bool cmp (node x, node y){
if (x.l!=y.l) return x.l<y.l;
else return x.r<y.r;
}
int main (){
int n,xb=1 ; cin >> n;
for (int i=1; i<=n; i++) scanf ("%lld %lld", &a[i].l, &a[i].r);
sort (a+1, a+n+1, cmp);
unsigned long long ans=0;
b[1]=a[1];
for (int i=1; i<=n; i++)
{
if(b[xb].r<a[i].l)ans+=b[xb].r-b[xb].l+1,b[++xb]=a[i];
else b[xb].r=max(a[i].r,b[xb].r);
}
cout << ans+b[xb].r-b[xb].l+1 << endl;
return 0;
}
```
@[HarryKane](/user/667808)
by IAWNA @ 2022-09-25 18:03:10
用堆写很方便
```cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
int read() {
int x = 0, k = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') k = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * k;
}
#define P pair <int, int>
#define l first
#define r second
priority_queue <P, vector <P>, greater <P> > q;
signed main() {
int n = read();
for (int i = 1; i <= n; i++) {
int l = read(), r = read();
q.push(make_pair(l, r));
}
int ans = 0;
while (q.size() >= 2) {
P x = q.top(); q.pop();
P y = q.top(); q.pop();
if (x.r >= y.l) {
q.push(make_pair(x.l, max(x.r, y.r)));
} else {
q.push(make_pair(y.l, y.r));
ans += x.r - x.l + 1;
}
}
ans += q.top().r - q.top().l + 1;
printf("%lld", ans);
}
/*
2
0 1000000000000000
5 25
*/
```
@[HarryKane](/user/667808)
by LYBAKIOI @ 2022-09-25 18:08:34
@[我是WA从来不AC](/user/566878)
@[HarryKane](/user/667808)
借楼发问:周一考政治吗?考几课?
by LYBAKIOI @ 2022-09-25 18:16:19
@[LYBAKIOI](/user/719490) 布吉岛
by HarryKane @ 2022-09-25 18:25:28
我猜想,应该是一二两课一起考,因为第一课题不多
@[LYBAKIOI](/user/719490)
by IAWNA @ 2022-09-25 18:45:44
@[LYBAKIOI](/user/719490) 谷甚论政治!!!
by RP_INT_MAX @ 2022-09-25 18:55:14
道法)
by LYBAKIOI @ 2022-09-25 18:59:48
~~缺德与犯法~~
@[LYBAKIOI](/user/719490)
by IAWNA @ 2022-09-25 20:01:47