D题离谱TLE求条+玄关
  • 板块学术版
  • 楼主xiaoke2021
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/22 01:04
  • 上次更新2024/9/22 09:12:20
查看原帖
D题离谱TLE求条+玄关
592751
xiaoke2021楼主2024/9/22 01:04

如下,思路是:

  • 对于一个工作,给第 ld+1l-d+1 天到第 rr 天的 cnt 加一(用差分写);

  • 处理 cnt 时逐一比较。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
int n,d,k;
int cnt[1000000+5];
signed main(){
	cin>>t;
	while(t--){
		memset(cnt,0,sizeof(cnt));
		int cnt1=-1,cnt2=1000000+5,ans1,ans2;
		cin>>n>>d>>k;
		if(n-d+1<=0){
			cout<<1<<" "<<1;
			continue;
		}
		for(int i=1;i<=k;i++){
			int l,r;
			cin>>l>>r;
			cnt[max(1ll,l-d+1)]++,cnt[min(r+1,n+1)]--;
		}for(int i=1;i<=n;i++) cnt[i]+=cnt[i-1];
		for(int i=1;i<=n-d+1;i++){
			if(cnt[i]>cnt1){
				cnt1=cnt[i];
				ans1=i;
			}if(cnt[i]<cnt2){
				cnt2=cnt[i];
				ans2=i;
			}
		} 

		cout<<ans1<<" "<<ans2<<endl;
	}
	return 0;
}

本代码时间复杂度应该是 O(n)O(\sum{n}) 的,但为什么会 TLE?求条+玄关。

2024/9/22 01:04
加载中...