社区讨论

如何降低此代码时间复杂度

P11349 [NOISG 2024 Finals] Problem Setter参与者 5已保存回复 19

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
19 条
当前快照
1 份
快照标识符
@mhj0upk2
此快照首次捕获于
2025/11/03 18:53
4 个月前
此快照最后确认于
2025/11/03 20:31
4 个月前
查看原帖
确实是被hack狠狠地爆了,需要降低时间复杂度但我不会
CPP
#include<bits/stdc++.h>
using namespace std;
struct com{
	long long id,s,m;
}cpt[200010];
long long cmp(com a,com b){
	return a.s<b.s;
} 
long long c,p,q[200010],d[200010],mnow,cm=1000000,cmid,l,r,sum,rem[1000010];
int main(){
	cin>>c>>p;
	for(int i=1;i<=c;i++){
		cin>>mnow>>cpt[i].s;
		cpt[i].m=mnow;
		cpt[i].id=i;
		if(mnow<cm){
			cm=mnow;
			cmid=i;
		}
	}
	sort(cpt+1,cpt+1+c,cmp);
	for(int i=1;i<=p;i++){
		cin>>q[i]>>d[i];
		r=c;
		if(rem[q[i]]!=0&&d[i]<=rem[q[i]]){
			sum+=rem[q[i]]-d[i];
			continue;
		}
		if(d[i]>=cpt[c].s) continue;
		while(q[i]<cpt[r].m&&d[i]<cpt[r].s){
			r--;
			if(cpt[r].id==cmid){
				break;
			}
		}
		if(d[i]>cpt[r].s) continue;
		if(q[i]>=cpt[r].m&&d[i]<cpt[r].s){
			rem[q[i]]=cpt[r].s;
			sum+=cpt[r].s-d[i];
		}
	} 
	cout<<sum;
	return 0;
}

回复

19 条回复,欢迎继续交流。

正在加载回复...