萌新的小问题
查看原帖
萌新的小问题
134476
wyx__楼主2021/10/17 15:33

这份代码TLE7个点

这份代码全AC

两者只有cmp函数不同。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int  MAXN=100005;
int n,a[MAXN],b[MAXN],f[MAXN],tot1,tot2;
struct data{
	int l,r,val;
}c[MAXN],d[MAXN];
vector<int>k[MAXN];
bool cmp1(data x,data y){
	//return x.r<y.r||(x.r==x.r&&x.l<y.l);//这是TLE的写法
    if(x.r!=y.r) return x.r<y.r;
    return x.l<y.l;//这是AC的写法
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);
	for(int i=1;i<=n;i++){
		if(a[i]+b[i]>=n)
			continue;
		c[++tot1].l=a[i]+1,c[tot1].r=n-b[i];
	}
	//cout<<tot1<<endl;
	sort(c+1,c+tot1+1,cmp1);
	for(int i=1;i<=tot1;i++){
		if(c[i].l==c[i-1].l&&c[i].r==c[i-1].r){
			if(d[tot2].val<d[tot2].r-d[tot2].l+1)d[tot2].val++;
		}
		else{
			d[++tot2].l=c[i].l,d[tot2].r=c[i].r,d[tot2].val=1;
			k[d[tot2].r].push_back(tot2);
		}
	}
	//cout<<tot2<<endl;
	//for(int i=1;i<=tot2;i++)
		//cout<<d[i].l<<' '<<d[i].r<<' '<<d[i].val<<endl;
	for(int i=1;i<=n;i++){
		f[i]=f[i-1];
		if(k[i].size())
			for(int j=0;j<k[i].size();j++)
				f[i]=max(f[i],f[d[k[i][j]].l-1]+d[k[i][j]].val);
	}
	cout<<n-f[n];
	return 0;
} 

请问是哪里有问题?

2021/10/17 15:33
加载中...