文远知行杯广东工业大学第十六届程序设计竞赛
A-区间最大值
定义 a[i] = n % i,给定L, R,求区间LR中,数组a的最大值。n <= 1e8. 做法: 如果n <= 1e6,可以建st表查询。注意到询问的次数才1e4,可以考虑下整除分块。本地打表分块,输出一个块内所有n % i的值,发现块内的左端点的n % i的值是最大的。 从L开始到R进行整除分块的操作,不断更新最大值就好了。
#include
#define int long long
using namespace std;
const int N = 1e6 + 5, mod = 1e9 + 7;
void solve()
{
int n, m;
cin >> n >> m;
while(m--)
{
int L, R;
scanf("%lld%lld", &L, &R);
共有 0 条评论