60分,求助

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,k;
ll ans;
int a[100005],b[100005];

int ask(int p,int l,int r)
{
	while(l<r)
	{
		 int mid=(l+r+1)/2;
		 if(a[mid]<p)l=mid;
		 else r=mid-1;
	}
	return l;
}
int Ask(int p,int l,int r)
{
	while(l<r)
	{
		 int mid=(l+r)/2;
		 if(a[mid]>p)r=mid;
		 else l=mid+1;
	}
	return l;
}
int main()
{
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		b[i]=b[i-1]+a[i];
	}
	a[n+1]=a[n]+k+1;
	for(int i=1;i<n;i++)
	{
		int r=ask(m-k+1+a[i],i,n);
		int R=ask(m+k+1+a[i],i,n);
		int L=Ask(k+a[i],i+1,n+1);
		//if(m-k+1+a[i]<=a[i+1])r=i;
		//if(m+k+1+a[i]<=a[i+1])R=i;
		if(r>i)
		{
			ans+=(r-i)*(m-k+1+a[i]);
			ans-=b[r]-b[i];
		}
		if(R>=L)
		{
			ans+=(R-L+1)*(m+k+1+a[i]);
			ans-=b[R]-b[L-1];
		}
		//cout<<ans<<endl;

	}
	cout<<ans;
}

全部评论

相关推荐

Rena1ssanc...:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:20
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务