rt,这份 10pts 代码
#include<bits/stdc++.h>
//#define int long long
using namespace std;
inline int read(){
char c=getchar();
int ret=0,f=1;
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
ret=(ret<<3)+(ret<<1)+c-'0';
c=getchar();
}return ret*f;
}
inline void write(int x,int op){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10,0);
putchar((char)(x%10+'0'));
if(op){
if(op>0)puts("");
if(op<0)putchar(' ');
if(op==0)puts("114514");
}
}
const int N=114514;
int n;
int cnt1,cnt2;
int f[N],b[N];
int l[N],r[N];
struct node{
int l,r;
}a[N];
bool cmp(node x,node y){
return x.r==y.r?x.l<y.l:x.r<y.r;
}
signed main(){
n=read();
for(int i=1;i<=n;i++){
int x=read(),y=read();
if(x+y>=n)continue;
a[++cnt1].l=x+1,a[cnt1].r=n-y;
}sort(a+1,a+1+cnt1,cmp);
for(int i=1;i<=cnt1;i++){
b[((a[i].l!=a[i-1].l||a[i].r!=a[i-1].r)?++cnt2:cnt2)]=min(b[cnt2]+1,a[i].r-a[i].l+1);
l[cnt2]=a[i].l,r[cnt2]=a[i].r;
}
for(int i=1,j=1;i<=n;i++){
f[i]=f[i-1];
while(j<=cnt2&&r[j]==i)f[i]=max(f[i],f[l[j]-1]+b[j++]);
}
write(n-f[n],0);
return 0;
}
与这个 100pts 代码
#include<bits/stdc++.h>
//#define int long long
using namespace std;
inline int read(){
char c=getchar();
int ret=0,f=1;
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
ret=(ret<<3)+(ret<<1)+c-'0';
c=getchar();
}return ret*f;
}
inline void write(int x,int op){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10,0);
putchar((char)(x%10+'0'));
if(op){
if(op>0)puts("");
if(op<0)putchar(' ');
if(op==0)puts("114514");
}
}
const int N=114514;
int n;
int cnt1,cnt2;
int f[N],b[N];
int l[N],r[N];
struct node{
int l,r;
}a[N];
bool cmp(node x,node y){
return x.r==y.r?x.l<y.l:x.r<y.r;
}
signed main(){
n=read();
for(int i=1;i<=n;i++){
int x=read(),y=read();
if(x+y>=n)continue;
a[++cnt1].l=x+1,a[cnt1].r=n-y;
}sort(a+1,a+1+cnt1,cmp);
for(int i=1;i<=cnt1;i++){
if(a[i].l!=a[i-1].l||a[i].r!=a[i-1].r)++cnt2;
b[cnt2]=min(b[cnt2]+1,a[i].r-a[i].l+1);
l[cnt2]=a[i].l,r[cnt2]=a[i].r;
}
for(int i=1,j=1;i<=n;i++){
f[i]=f[i-1];
while(j<=cnt2&&r[j]==i)f[i]=max(f[i],f[l[j]-1]+b[j++]);
}
write(n-f[n],0);
return 0;
}
有什么区别?