社区讨论

诡异的思路但连样例都过不了,求改

P10837『FLA - I』云音泛参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@miebsg2z
此快照首次捕获于
2025/11/25 16:40
3 个月前
此快照最后确认于
2025/11/25 17:43
3 个月前
查看原帖
rt
CPP
#include<bits/stdc++.h>
using namespace std;
int const N=2e5+5;
int st[N],ed[N];
vector<int>t;
int f[N<<1],g1[N<<1],g2[N<<1];
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n,m; cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>st[i];
		ed[i]=st[i]+m-1;
		t.emplace_back(st[i]);
		t.emplace_back(ed[i]);
	}
	sort(t.begin(),t.end());
	t.erase(unique(t.begin(),t.end()),t.end());
	for(int i=1;i<=n;i++){
		st[i]=lower_bound(t.begin(),t.end(),st[i])-t.begin()+1;
		ed[i]=lower_bound(t.begin(),t.end(),ed[i])-t.begin()+1;
		f[st[i]]++;
		f[ed[i]+1]--;
	}
	for(int i=1;i<=t.size();i++){
		f[i]+=f[i-1];
		int k=(i>1?t[i-1]-t[i-2]:t[i-1]);
		g1[i]=g1[i-1]+(f[i]==1)*k;
		g2[i]=g2[i-1]+(f[i]==2)*k;
	}
	int ans=g2[t.size()],add=0,minn=0x3f3f3f3f;
	for(int i=1;i<=n;i++){
		int tmp1=g1[ed[i]]-g1[st[i]-1];
		int tmp2=g2[ed[i]]-g2[st[i]-1];
		add=max(add,tmp2-tmp1);
		minn=min(minn,tmp1);
	}
	ans=ans+add-minn;
	cout<<ans;
	return 0;
}

回复

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

正在加载回复...