社区讨论
D,Wa4个点,求调,玄关
学术版参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhj02sn6
- 此快照首次捕获于
- 2025/11/03 18:31 4 个月前
- 此快照最后确认于
- 2025/11/03 18:31 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,op;
ll m,a[3145140],s[3145140],b[3145140];
ll ans,c,cnt,res;
ll js(){
int l=op,r=cnt+cnt+cnt,mid=0;
while(1){
if(mid==(l+r)/2)
break;
mid=(l+r)/2;
if(s[mid]-s[op]>=c)
r=mid;
else
l=mid+1;
}
mid=max(mid-51,op);//cout<<mid<<' ';
while(mid++)
if(s[mid]-s[op]>=c&&s[mid-1]-s[op]<c)
break;
//cout<<op<<' '<<mid<<' '<<s[mid]-s[op]<<'\n';
return s[mid]-s[op];
}
int main(){
cin>>n>>m>>c;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i]++;
}
//a[++n]=1;
a[++n]=m;
sort(a+1,a+1+n);
a[0]=0;
if(a[1]!=1)
b[++cnt]=0;
for(int i=1;i<=n;i++){
if(a[i-1]!=a[i])
b[++cnt]++;
else
b[cnt]++;
}
//if(a[n]!=m){
// a[++n]=m;
// b[++cnt]=0;
//}
//b[1]--;
b[cnt]--;
for(int i=1;i<=cnt+cnt;i++)
b[i+cnt]=b[i];
for(int i=1;i<=cnt+cnt+cnt;i++)
s[i]=s[i-1]+b[i];
//cout<<s[1]<<' '<<s[2]<<' ';
//for(int i=1;i<=cnt+cnt;i++)
// cout<<i<<' '<<b[i]<<" "<<s[i]<<'\n';
for(int i=1;i<=n;i++){
if(a[i]!=a[i-1]){
op++;
//cout<<js()<<' '<<a[i]-a[i-1]<<'\n';
ans+=(a[i]-a[i-1])*js();
// cout<<ans<<'\n';
}
} //cout<<js()<<'\n';
// op++;
// ans+=(m-a[n])*js();
// cout<<m-a[n]<<' ';
cout<<ans;
return 0;
}
/*
5 4 2
1 1 1 2 2
*/
回复
共 4 条回复,欢迎继续交流。
正在加载回复...