官方题解
cookiebus
2023-02-27 19:30:01
2024-04-26 15:18:14
15
返回题目
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 400010;
struct Build {
int f, id; ll p, len; } b[N];
ll dp[N]; bool cmp(Build u, Build v) {
if (u.p == v.p)
return u.f < v.f;
return u.p < v.p;
} void in(ll &x) {
char c = getchar();
while (c < '0' || c > '9') c = getchar();
for (x = 0; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
} int main() {
int t;
scanf("%d", &t);
while (t--) {
ll n, x, y;
int k;
scanf("%lld %d", &n, &k);
for (int i = 1; i <= k; i++) {
in(x), in(y);
b[i * 2 - 1].f = 0;
b[i * 2 - 1].p = x;
b[i * 2 - 1].id = i;
b[i * 2 - 1].len = y - x + 1;
b[i * 2].f = 1;
b[i * 2].p = y;
b[i * 2].id = i;
b[i * 2].len = y - x + 1;
} sort(b + 1, b + 2 * k + 1, cmp); memset(dp, 0, sizeof dp); ll maxl = 0; for (int i = 1; i <= 2 * k; i++) {
if (b[i].f == 0) dp[b[i].id] = maxl + b[i].len; else
maxl = max(maxl, dp[b[i].id]); }
ll ans = 0;
for (int i = 1; i <= k; i++) ans = max(ans, dp[i]); printf("%lld\n", ans); }
return 0;
}
{{ vote && vote.total.up }}