\(\text{Solution}\)

发现题目就是求 \(\sum[\prod_{i=1}^k x_i \le n]\)

\(k \le 10^9\) 太可怕了

然而发现如果限定 \(x_i > 1\) 那么 \(i \le \log n\)

于是我们可以愉快地统计了

设 \(f_i(n)\) 表示将 \(n\) 分成 \(i\) 份使 \(x_i > 1\) 的方案数

那么 \(f_i(n)=\sum_{d|n}f_{i-1}(\frac n d)-f_{i-1}(n)\)

那个减号就是减去 \(d=1\) 时的情况

先不考虑减法,发现它的转移就是 \(Dirichlet\) 前缀和

于是处理 \(f\) 可做到 \(O(n \log n \log\log n)\)

每个询问还要枚举多少个位置不填 \(1\),组合算一下方案

总的就是 \(O(n \log n \log\log n + Q \log n)\)

\(\text{Code}\)

#include <cstdio>
#include <iostream>
#define re register
#define LL long long
using namespace std; const int N = 5e5 + 5, P = 998244353;
int mxR, mxK, q, log[N], tot, pr[N], vis[N];
LL f[20][N], inv[20]; inline void read(int &x)
{
x = 0; int f = 1; char ch = getchar();
while (!isdigit(ch)) f = (ch == '-' ? -1 : f), ch = getchar();
while (isdigit(ch)) x = (x<<3) + (x<<1) + (ch^48), ch = getchar();
x *= f;
}
void sieve(int n)
{
for(re int i = 2; i <= n; i++)
{
if (!vis[i]) pr[++tot] = i;
for(re int j = 1; j <= tot && pr[j] * i <= n; j++)
{
vis[pr[j] * i] = 1;
if (i % pr[j] == 0) break;
}
}
}
LL Add(LL x, LL y)
{
x += y;
if (x > P) x -= P;
return x;
} int main()
{
freopen("easy.in", "r", stdin), freopen("easy.out", "w", stdout);
read(mxR), read(mxK), read(q);
sieve(mxR);
for(re int i = 2; i <= mxR; i++) log[i] = log[i >> 1] + 1, f[1][i] = 1;
int lg = log[mxR];
for(re int i = 2; i <= lg; i++)
{
for(re int j = 1; j <= mxR; j++) f[i][j] = f[i - 1][j];
for(re int j = 1; j <= tot; j++)
for(re int k = 1; k * pr[j] <= mxR; k++)
f[i][k * pr[j]] = Add(f[i][k * pr[j]], f[i][k]);
for(re int j = 1; j <= mxR; j++) f[i][j] = Add(f[i][j], P - f[i - 1][j]);
}
for(re int i = 1; i <= lg; i++)
for(re int j = 1; j <= mxR; j++) f[i][j] = Add(f[i][j], f[i][j - 1]);
inv[1] = 1;
for(re int i = 2; i <= lg; i++) inv[i] = (P - P / i) * inv[P % i] % P;
for(int l, r, k; q; q--)
{
read(l), read(r), read(k);
LL ans = 0, c = 1;
for(re int i = 1; i <= log[r]; i++)
{
c = c * (k - i + 1) % P * inv[i] % P;
ans = Add(ans, (f[i][r] - f[i][l - 1] + P) * c % P);
}
printf("%lld\n", ans + (l <= 1));
}
}

NOIP 模拟赛 简单题的更多相关文章

  1. noip模拟赛 水题

    题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽分别是xi和yi.对于第二副牌的每张牌长和宽分别是aj和bj.第一副牌的第i张牌能覆盖第二副牌的第 ...

  2. 2016 10 26考试 NOIP模拟赛 杂题

    Time 7:50 AM -> 11:15 AM 感觉今天考完后,我的内心是崩溃的 试题 考试包 T1: 首先看起来是个贪心,然而,然而,看到那个100%数据为n <= 2000整个人就虚 ...

  3. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  4. 2016-06-19 NOIP模拟赛

          2016-06-19 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c ...

  5. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

  6. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  7. NOIP模拟赛 6.29

    2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走, ...

  8. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  9. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  10. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

随机推荐

  1. 解决PyQt5报错defaultServiceProvider::requestService(): no service found for..

    简述 之前因为这个报错解决了很长时间,因为我之前一直是用 pip3 工具安装的 PyQt5 ,但是用 pip3 工具安装 PyQt5 后, 自己写的音乐播放器一直没有声音,而且还有不能调用 fcitx ...

  2. flutter系列之:在flutter中使用流式布局

    目录 简介 Flow和FlowDelegate Flow的应用 总结 简介 我们在开发web应用的时候,有时候为了适应浏览器大小的调整,需要动态对页面的组件进行位置的调整.这时候就会用到flow la ...

  3. Docker常用命令、Docker Compose、DockerFile实践

    〇.简介 https://hub.docker.com/ 1.架构 2.目录 镜像操作 容器操作 容器运行 Docker示例-MySQL Docker示例-Redis Docker示例-Nacos 使 ...

  4. 【每日一题】【字符串与数字互转】【去除空格】【大数处理】2021年12月12日-8. 字符串转换整数 (atoi)

    请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(string s) 的算法如下: ...

  5. Qt的进程间通信,以服务器的形式,手把手教你VS上进行Qt的COM、ActivedQt Server的开发,比保姆还保姆(一)

    Qt的进程间通信,以Active服务器的形式,手把手教你VS上进行Qt的COM.ActivedQt Server的开发,比保姆还保姆 写在前面,文中的ID有部分对不上,因为我中途改了一下,我建议你在实 ...

  6. Win10系统安装U盘,安装纯净版Win10的通用教程

    安装前准备:1.准备8G或8G以上U盘(32G以内).2.制作U盘会格式化U盘,U盘内的重要文件也要事先备份好.操作步骤:1.打开微软下载WIN10网址:(如果网址无法打开,可以下载解压运行附件内的工 ...

  7. 使用linux的ffmpeg进行B站直播推流

    很久之前买了个友善的开发板R2S,一直在家吃灰.最近看到网上有用ffmpeg进行直播推流的案例,想把吃灰的的开发板利用起来,于是有了这篇教程. 第一步:安装ffmpeg sudo apt update ...

  8. 基于容器的PaaS混合云的几种形式

    概述 这是 Gartner 的一个图,提供了全球的基于容器的 PaaS 公有云.混合云服务的梳理展示: 这里提供一个其他的视角: 中国市场,基于容器的 PaaS 混合云(公有云 + 私有云)的相关厂商 ...

  9. JVM面试大总结

    一.汇总 JVM是运行在操作系统之上的,它与硬件没有直接的交互.先说一下JVM的内存区域,当函数开始运行时,JVM拿到自己的内存将自己的内存区域进行了分割,分为五块区域:线程共享的有堆.方法区,线程私 ...

  10. Spark详解(07) - SparkStreaming

    Spark详解(07) - SparkStreaming SparkStreaming概述 Spark Streaming用于流式数据的处理. Spark Streaming支持的数据输入源很多,例如 ...