【10-31模拟赛T1】四舍五入

给出 n,对于任意正整数 i 满足 1in,求有多少个正整数 j 满足 1 leqjnimodjj2

枚举 i 不好处理,可以反过来,外层枚举 j,内层枚举左右端点 l=kj,r=kj+j2k 为自然数且 kjn),可知 ansl,ansl+1,,ansr 均要加 1,这可以用差分实现。

复杂度 O(nlogn)

#include<bits/stdc++.h>
using namespace std;
const int N = 2e6 + 9;
int n;
int ans[N << 1];//这里需要稍微开大一点 
signed main(){
	freopen("count.in","r",stdin);
	freopen("count.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n;
	for(int j = 1;j <= n;j++)
		for(int i = 0;i <= n;i += j){
			ans[i]++;
			ans[i + (j - 1 >> 1) + 1]--;
		}
	for(int i = 1;i <= n;i++){
		ans[i] += ans[i - 1];
		cout << ans[i] << ' ';
	}
	return 0;
}

posted @   5t0_0r2  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示