1 条题解
-
0
可能是正解cpp:
#include<bits/stdc++.h>//1078 代码直接修改得来,by cff_0102,没经过对拍验证,因为不会打暴力 #define int long long using namespace std; const int N=1e6+10; template<typename T>void qr(T& x) { x=0;int f=1;char c=getchar(); for( ;!isdigit(c);c=getchar())if(c=='-')f=-1; for( ; isdigit(c);c=getchar())x=x*10+c-48; x=x*f; } struct node{int x,y,L;}a[N]; int n,f[N]; int find(int x) { int L=1,R=n,mid,ans=0; while(L<=R) { mid=(L+R)>>1; if(a[mid].y<=x)L=mid+1,ans=mid; else R=mid-1; } return ans; } signed main() { qr(n); for(int i=1;i<=n;i++) { qr(a[i].x);qr(a[i].y); a[i].L=a[i].y-a[i].x; } sort(a+1,a+n+1,[](const node &n1,const node &n2){return n1.y<n2.y;}); memset(f,0x3f,sizeof(f)); a[0]={0,0}; f[0]=0; for(int i=1;i<=n;i++) { int tmp=find(a[i].x); f[i]=f[tmp]+a[i].L; if(tmp<i-1)f[i]=min(f[i],f[i-1]); } printf("%d\n",f[n]); return 0; }
- 1
信息
- ID
- 285
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 70
- 已通过
- 33
- 上传者