求助刚刚的 CF C题
  • 板块学术版
  • 楼主LiJoQiao
  • 当前回复4
  • 已保存回复6
  • 发布时间2023/10/22 17:07
  • 上次更新2023/11/2 11:51:56
查看原帖
求助刚刚的 CF C题
945364
LiJoQiao楼主2023/10/22 17:07

求 hack,或 hack 思路也行

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;
int lsh[MAXN<<1],chafen[MAXN<<1],a[MAXN<<1],n,m;
struct line{
	int l,r;
}li[MAXN];
int main(){
	ios::sync_with_stdio(0);cin.tie(0);
	int t;cin>>t;
	while(t){
		--t;
		memset(chafen,0,sizeof(chafen));
		cin>>n>>m;
		int lshcnt=0;
		for(int i=1;i<=n;++i){
			cin>>li[i].l>>li[i].r;
			lsh[++lshcnt]=li[i].l;lsh[++lshcnt]=li[i].r;
		}
		sort(lsh+1,lsh+lshcnt+1);
		int lshn=unique(lsh+1,lsh+lshcnt+1)-(lsh+1);
		int maxa=0;
		for(int i=1;i<=n;++i){
			li[i].l=lower_bound(lsh+1,lsh+lshn+1,li[i].l)-lsh;
			li[i].r=lower_bound(lsh+1,lsh+lshn+1,li[i].r)-lsh;
			chafen[li[i].l]+=1;chafen[li[i].r+1]-=1;
		}
		vector<int>maxap;
		for(int i=1;i<=lshn;++i){
			a[i]=a[i-1]+chafen[i];
			if(maxa<a[i]){
				maxap.clear();
				maxap.push_back(i);
				maxa=a[i];
			}
			else if(maxa==a[i]){
				maxap.push_back(i);
			}
		}
		int mina,minmina=0x3f3f3f3f;
		if(lsh[1]==1&&lsh[lshn]==m){
			for(int i=0;i<maxap.size();++i){
				memset(chafen,0,sizeof(chafen));
				for(int j=1;j<=n;++j){
					if(li[j].l<=maxap[i]&&li[j].r>=maxap[i]){
						chafen[li[j].l]+=1;chafen[li[j].r+1]-=1;
					}
				}
				mina=a[1]=chafen[1];
				for(int j=2;j<=lshn;++j){
					a[j]=a[j-1]+chafen[j];
					mina=min(mina,a[j]);
				}
				minmina=min(mina,minmina);
			}
		}
		else minmina=0;
		cout<<maxa-minmina<<'\n';
	}
	return 0;
}
2023/10/22 17:07
加载中...