codeforces 252 C. Points on Line 枚举+思维
要求最远的不能超过d;
又因为保证了递增
那我们固定一个点,找到数列里第一个刚好<=该点+d的位置
然后区间中任意挑两个数都是合法的;
c(2,m)√
#
如何找到第一个刚好<=?
不手写二分的话用
ll r=upper_bound(a+1,a+n+1,tmp)-a; r--;
注意是upper,和lower的区别是它可以==,我们要的就是==;
注意-=1;
#
到后面会溢出,没开longlong见祖宗系列;
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a[100005]; int main( ) { ll n,d; ll ans=0; cin>>n>>d; for(ll i=1;i<=n;i++) { cin>>a[i]; } for(ll i=1;i<=n;i++) { ll tmp; tmp=a[i]+d; ll r=upper_bound(a+1,a+n+1,tmp)-a; r--; //cout<<r<<endl; if(r<=n&&r-i>=2&&a[r]-a[i]<=d) { ans+=(r-i)*(r-i-1)/2; //cout<<r<<" "<<i<<endl; } else if(r>n&&n-i>=2&&a[n]-a[i]<=d) { ans+=(n-i)*(n-i-1)/2; //cout<<r<<" "<<i<<endl; } } /* 31 0 36 0 43 1 47 1 48 0 50 0 56 0 */ //cout<<a[i]<<" "<<tmp<<" "<<r<<endl cout<<ans; }
分类:
思维题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)