求助,0 pt

P2082 区间覆盖(加强版)

您为什么不老老实实地写一个区间合并呢?
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


|