整除分块
给定一段连续的区间
中n/i(下取整)的值是不会发生变化的
[4,5] [6,10]
对于这些相似的n/i只要计算出他们的区间左右端点各是多少
就可以用O(1)的时间复杂度求解这一部分了
小知识
所以下面的题目如果求区间内n%i的最大值也就是n-i*[n/i]的最大值
我们用整除分块的思想计算出一定数量(k1/2)的区间内[n/i]值相等,然后公式前面的n相等
所以能得到区间内的左端点满足max(l)=max(l,r)
即左端点即为最大值
#include <bits/stdc++.h> #define endl '\n' #define x first #define y second #define int long long #define Tang ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); using namespace std; const int N=1e5+10; const int INF=0x3f3f3f3f; const int mod=1e9+7; void solve() { int n,m; cin >> n >> m; while(m--) { int ans=0; int L,R; cin >> L >> R; for(int l=L,r;l<=R;l=r+1) { r=min(n/(n/l),R); ans=max(ans,n%l); } cout << ans << endl; } } signed main() { Tang int T=1; //cin >> T; while(T--) solve(); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)