sort对X排序, ans=min(x[i]+max(y[i+1]+y[i+2]+……) ) (i=n,n-1,……2,1);
以i从大到小的顺序扫描一下o(n);
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; struct node { int x,y; }a[100010]; bool cmp(node a,node b) { return a.x<b.x; } int main() { int t,n,cas=1; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y); sort(a,a+n,cmp); int maxn=0,ans=0x3f3f3f3f; for(int i=n-1;i>=0;i--) { ans=min(ans,maxn+a[i].x); maxn=max(maxn,a[i].y); } printf("Case %d: %d\n",cas++,ans); } return 0; }