求hack
查看原帖
求hack
358971
朦胧_XY楼主2023/8/27 15:30

39pts,错的挺整齐的

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 500005;
int n, tot, len;
ll maxa, ans = 1ll<<62;
struct Node{
	ll a, b;
} rgn[N];
bool cmp(Node x, Node y){
	return x.a < y.a || (x.a == y.a && x.b < y.b);
}
int main(){
	ll x, y, tmp = 0;
	scanf("%d", &n);
	for(int i = 1; i <= n; i++){
		scanf("%lld%lld", &x, &y);
		if(x < y) maxa = max(maxa, y);
		else maxa = max(maxa, x), rgn[++tot].a = x, rgn[tot].b = y;
	}
	sort(rgn + 1, rgn + tot + 1, cmp);
	for(int i = 1; i <= tot; i++) if(rgn[i].a != rgn[i-1].a){
		while(len && rgn[i].b <= rgn[len].a) len--; len++;
		rgn[len].a = rgn[i].a, rgn[len].b = min(rgn[len].b, rgn[i].b);
	}
	for(int i = 1; i <= len; i++){
		ans = min(ans, tmp + maxa - rgn[i].b);
		tmp += rgn[i].a-rgn[i].b << 1;
	} ans = min(ans, tmp);
	printf("%lld", maxa + ans);
	return 0;
} 
2023/8/27 15:30
加载中...