\(\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. MySQL57 zip安装

    引用:MySQL5.7的.zip文件的配置安装   由于MySQL5.7之后在javaEE中交互的端口发生了变化,而MySQL官网中5.6.5.7版本64位的只有.zip文件,而.zip文件不像直接下 ...

  2. lauyi渲染

    下拉框 <div class="layui-form-item x-city" id="start"> <label class=" ...

  3. 【ASP.NET Core】MVC控制器的各种自定义:特性化的路由规则

    MVC的路由规则配置方式比较多,咱们用得最多的是两种: A.全局规则.就是我们熟悉的"{controller}/{action}". app.MapControllerRoute( ...

  4. Leetcode-SQL学习计划-SQL入门-584:寻找用户推荐人

    建表语句: Create table If Not Exists Customer (id int, name varchar(25), referee_id int) Truncate table ...

  5. Nmap脚本

    Nmap的脚本默认存放在Nmap的安装路径的scripts文件夹下Nmap的脚本主要分为以下几类 Auth:负责处理鉴权证书(绕过鉴权)的脚本 Broadcast:在局域网内探查更多服务的开启情况,如 ...

  6. 使用浏览器inspect调试app

    使用浏览器inspect调试app 在开发混合项目的过程中,常常需要在app环境排查问题,接口可以使用fiddler等工具来抓包,但是js错误就不好抓包了,这里介绍一种调试工具-浏览器. 1.调试过程 ...

  7. java中的字符串数组

    本文主要讲述java中的字符串数组 字符串数组的声明有如下几种形式: // 第一种方式:new // 注意在String的后面[]中不需要添加字符串数组的长度.否则报错. String[] arr_1 ...

  8. 第二章 --------------------XAML基础

    1.XAML是什么? XAML是扩展标记语言,是为了方便设计人员设计UI界面.具体关于XAML语法的讲解参考其他相关书籍.  XAML每一个标签以<>开头,以</>结尾,作为标 ...

  9. 1_ES6中拓展运算符的使用

    一,拓展运算符(...) 拓展运算符(...):它会以参数序列的形式输出,更白话讲,比如数组,它可以把数组里面的东西一个一个的输出出来,例如 1 let arr1 =["你",&q ...

  10. [深度探索C++对象模型]memcpy和memset注意事项

    不管使用memcpy()还是memset(),都只有在"classes不含任何由编译器产生的内部members"时才能运行.如果这个类声明一个或者一个以上的virtual func ...