Submission #1218607

#TimeUsernameProblemLanguageResultExecution timeMemory
1218607_rain_Autobahn (COI21_autobahn)C++20
50 / 100
293 ms39052 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=(int)1e5;
	int n,k,x;
	int l[N+2],t[N+2],r[N+2];
	vector<int>nen,pon;
	LL pre[N+2]={};
	int Find(int x){
		return upper_bound(nen.begin(),nen.end(),x)-nen.begin();
	}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0) ; cout.tie(0);
	#define task "main"
	if (fopen(task".inp","r")){
		freopen(task".inp","r",stdin);
		freopen(task".out","w",stdout);
	}
	
	cin>>n>>k>>x;
	for(int i=1;i<=n;++i){
		cin>>l[i]>>t[i]>>r[i];
		nen.push_back(l[i]);
		nen.push_back(r[i]);
		nen.push_back(r[i]+1);
		nen.push_back(l[i]+t[i]);
	}
	sort(nen.begin(),nen.end());
	nen.resize(unique(nen.begin(),nen.end())-nen.begin());
	vector<int>pon=nen;
	for(int i=0;i<pon.size();++i){
		nen.push_back(pon[i]+x-1);
		nen.push_back(pon[i]-x+1);
		nen.push_back(pon[i]-1);
		nen.push_back(pon[i]+1);
	}
	sort(nen.begin(),nen.end());
	nen.resize(unique(nen.begin(),nen.end())-nen.begin());
	vector<int>dem(nen.size()+2,0),f(nen.size()+2,0);
	vector<LL>pre(nen.size()+2,0);
	for(int i=1;i<=n;++i){
		dem[Find(l[i])]++,dem[Find(r[i]+1)]--;
		f[Find(l[i]+t[i])]++,f[Find(r[i]+1)]--;
	}
	for(int i=1;i<=nen.size();++i) {
		dem[i]+=dem[i-1];
		f[i]+=f[i-1];
	}
	for(int i=1;i<=nen.size();++i) dem[i]=(dem[i]>=k?1:0);
	for(int i=1;i<=nen.size();++i){
		pre[i]=pre[i-1];
		if (i<nen.size()) pre[i]+=(LL)dem[i]*f[i]*(nen[i]-nen[i-1]);
	}
	LL ans=0;
	for(auto&u:pon){
		int l=u,r=u-x+1;
		ans=max(ans,pre[Find(l)]-pre[Find(r)-1]);
		l=u,r=u+x-1;
		ans=max(ans,pre[Find(r)]-pre[Find(l)-1]);
	}
	cout<<ans;
}

Compilation message (stderr)

autobahn.cpp: In function 'int main()':
autobahn.cpp:18:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |                 freopen(task".inp","r",stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
autobahn.cpp:19:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |                 freopen(task".out","w",stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...