LuoguP1131选择客栈

TLE70

#include<cstdio>
#include<cstring>

int n,k,p,ans,sum[1000005],color[1000005],low[1000005],head[1000005],last[55];

int main(){
	memset(last,-1,sizeof(last));
	scanf("%d%d%d",&n,&k,&p);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&color[i],&low[i]);
		head[i]=last[color[i]];
		last[color[i]]=i;
		sum[i]=sum[i-1];
		if(low[i]<=p)sum[i]++;
		for(int j=head[i];j!=-1;j=head[j]){
			if(sum[i]-sum[j-1])ans++;
	//		printf("ha%d %d
",i,ans);
		}
	}
	printf("%d
",ans);
}

WA0

#include<cstdio>
#include<cstring>

int n,k,p,emm,last,pre[55],sum[55],ans[55];

int main(){
	last=-1;
	scanf("%d%d%d",&n,&k,&p);
	for(int i=1;i<=n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		if(y<=p)last=i;
		if(last>=pre[x])ans[x]+=sum[x];
		emm+=ans[x];
		sum[x]++;
		pre[x]=i;
	}
	printf("%d
",emm);
}

AC

#include<cstdio>
#include<cstring>

int n,k,p,emm,last,pre[55],sum[55],ans[55];

int main(){
	last=-1;
	scanf("%d%d%d",&n,&k,&p);
	for(int i=1;i<=n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		if(y<=p)last=i;
		if(last>=pre[x])ans[x]=sum[x];//bushi+=
		emm+=ans[x];
		sum[x]++;
		pre[x]=i;
	}
	printf("%d
",emm);
}
原文地址:https://www.cnblogs.com/Y15BeTa/p/11601527.html