2s512M。

解:先分解质因数。考虑按照质因数大小是否大于√分类。

大于的就是一个数颜色个数,莫队即可n√m。

小于的直接枚举质因数做前缀和然后O(1)查询。总时间复杂度n(√m + σ(√V))。

发现我们T飞了,发现莫队的复杂度较优,而处理小于√V的质因数较劣。我们平衡一下。

把界调整到1000。这样比lm大的至多两个,莫队常数*2。而后半部分的复杂度就变成了nσ(3√V),可以通过本题。

 #include <bits/stdc++.h>

 const int N = , MO = ;

 inline char gc() {
static char *p1, *p2, s[N];
if(p1 == p2) p2 = (p1 = s) + fread(s, , N, stdin);
return (p1 == p2) ? EOF : *p1++;
} template <class T> inline void read(T &x) {
x = ;
register char c(gc());
while(c < '' || c > '') {
c = gc();
}
while(c >= '' && c <= '') {
x = x * + c - ;
c = gc();
}
return;
} int ex[N], p[N], a[N], lc[N], rc[N], fr[N], top, X[N * ], xx, inv[N], bin[N], Ans, ans[N], sum[N], exx[N];
bool vis[N];
std::vector<int> v[N], v2[N]; struct Node {
int l, r, id;
inline bool operator < (const Node &w) const {
if(fr[l] != fr[w.l]) return l < w.l;
return r < w.r;
}
}node[N]; inline void getp(int n) {
for(register int i = ; i <= n; i++) {
if(!vis[i]) p[++top] = i;
for(int j = ; j <= top && i * p[j] <= n; j++) {
vis[i * p[j]] = ;
if(i % p[j] == ) break;
}
}
return;
} inline void add(int y) {
if(ex[y]) {
int x(ex[y]);
if(bin[x]) {
Ans = 1ll * Ans * inv[bin[x] + ] % MO;
}
++bin[x];
Ans = 1ll * Ans * (bin[x] + ) % MO;
}
if(exx[y]) {
int x(exx[y]);
if(bin[x]) {
Ans = 1ll * Ans * inv[bin[x] + ] % MO;
}
++bin[x];
Ans = 1ll * Ans * (bin[x] + ) % MO;
}
return;
} inline void del(int y) {
if(ex[y]) {
int x(ex[y]);
Ans = 1ll * Ans * inv[bin[x] + ] % MO;
--bin[x];
if(bin[x]) {
Ans = 1ll * Ans * (bin[x] + ) % MO;
}
}
if(exx[y]) {
int x(exx[y]);
Ans = 1ll * Ans * inv[bin[x] + ] % MO;
--bin[x];
if(bin[x]) {
Ans = 1ll * Ans * (bin[x] + ) % MO;
}
}
return;
} inline void solve(int x) {
printf("div : %d \n", x);
for(int i = ; i <= top; i++) {
if(x % p[i]) continue;
while(x % p[i] == ) {
printf("%d ", p[i]);
x /= p[i];
}
}
if(x > ) printf("%d ", x);
puts("");
return;
} int main() {
getp(); register int n, m, lm();
//scanf("%d%d", &n, &m);
read(n), read(m);
int T = n / sqrt(m);
for(register int i(); i <= n; ++i) {
//scanf("%d", &a[i]);
read(a[i]);
fr[i] = (i - ) / T + ;
register int x(a[i]), j();
for(; p[j] <= lm && p[j] <= x; ++j) {
register int cnt();
while(x % p[j] == ) {
x /= p[j];
++cnt;
}
if(cnt) {
v[j].push_back(i);
v2[j].push_back(cnt);
}
}
if(x == ) continue;
for(; j <= top; j++) {
if(x % p[j] == ) {
exx[i] = p[j];
X[++xx] = p[j];
x /= p[j];
break;
}
}
if(x > ) {
ex[i] = x;
X[++xx] = x;
}
} std::sort(X + , X + xx + );
xx = std::unique(X + , X + xx + ) - X - ;
for(register int i(); i <= n; ++i) {
//printf("i = %d : %d %d \n", i, ex[i], exx[i]);
if(ex[i]) {
ex[i] = std::lower_bound(X + , X + xx + , ex[i]) - X;
}
if(exx[i]) {
exx[i] = std::lower_bound(X + , X + xx + , exx[i]) - X;
}
} for(register int i(); i <= m; ++i) {
//scanf("%d%d", &node[i].l, &node[i].r);
read(node[i].l); read(node[i].r);
node[i].id = i;
}
inv[] = inv[] = ;
for(register int i(); i <= n + ; ++i) {
inv[i] = 1ll * inv[MO % i] * (MO - MO / i) % MO;
} for(register int i(); i <= fr[n]; ++i) {
lc[i] = rc[i - ] + ;
rc[i] = lc[i] + T - ;
if(i == fr[n]) rc[i] = n;
} std::sort(node + , node + m + ); Ans = ;
add();
int l = , r = ;
for(register int i = ; i <= m; i++) {
while(r < node[i].r) {
add(++r);
}
while(node[i].l < l) {
add(--l);
}
while(node[i].r < r) {
del(r--);
}
while(l < node[i].l) {
del(l++);
}
ans[node[i].id] = Ans;
//printf("ans %d = %d \n", node[i].id, Ans);
} /// step 2 for(register int i(); p[i] <= lm; ++i) {
int LEN(v[i].size()), p();
for(register int j(); j <= n; ++j) {
sum[j] = sum[j - ];
if(p < LEN && v[i][p] == j) {
sum[j] += v2[i][p++];
}
}
for(register int j(); j <= m; ++j) {
int x = sum[node[j].r] - sum[node[j].l - ];
ans[node[j].id] = 1ll * ans[node[j].id] * (x + ) % MO;
}
} for(register int i(); i <= m; ++i) {
printf("%d\n", ans[i]);
} return ;
}

AC代码

洛谷P5071 此时此刻的光辉的更多相关文章

  1. 洛谷 P5071 - [Ynoi2015] 此时此刻的光辉(莫队)

    洛谷题面传送门 一道其实算得上常规的题,写这篇题解是为了总结一些数论中轻微(?)优化复杂度的技巧. 首先感性理解可以发现该问题强于区间数颜色问题,无法用常用的 log 数据结构维护,因此考虑分块/莫队 ...

  2. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  3. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  4. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  5. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  6. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  7. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  8. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  9. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

随机推荐

  1. js 实现vue—引入子组件props传参

    参考:https://www.cnblogs.com/xiaohuochai/p/7388866.html 效果 html <!DOCTYPE html> <html> < ...

  2. iOS逆向系列-Mach-O文件

    概述 Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序.库的标准格式. 常见的Mach-O文件 属于Mach-O格式的文件类型有. 可以在xnu源码中,查看到Mach-O格式 ...

  3. 2019-2-17-如何在-Windows-10-中移除-Internet-Explorer-浏览器

    title author date CreateTime categories 如何在 Windows 10 中移除 Internet Explorer 浏览器 lindexi 2019-02-17 ...

  4. centos6 nginx安装好以后,添加拓展ssl

    前言 安装nginx的时候,只是执行最简单的安装,--user=nobody --group=nobody --prefix=/usr/local/nginx_1.8.1,没有安装http_ssl_m ...

  5. 深入浅出Mybatis系列(一)---Mybatis入门[转]

    最近两年 springmvc + mybatis 的在这种搭配还是蛮火的,楼主我呢,也从来没真正去接触过mybatis, 趁近日得闲, 就去学习一下mybatis吧. 本次拟根据自己的学习进度,做一次 ...

  6. wifi共享大师,去除弹窗广告。

    1.安装WiFi共享大师 2.不要打开 3.右键打开文件所在位置 4.在任意目录新建三个空的txt,重命名为MiniNews.exe.ProLive.exe.WifiUpdate.exe 5.将上面的 ...

  7. SpringBoot学习笔记(三):SpringBoot集成Mybatis、SpringBoot事务管理、SpringBoot多数据源

    SpringBoot集成Mybatis 第一步我们需要在pom.xml里面引入mybatis相关的jar包 <dependency> <groupId>org.mybatis. ...

  8. sip会话流程以及sip介绍(1)

    参考连接 :https://www.2cto.com/kf/201609/546336.html https://www.w3cschool.cn/session_initiation_protoco ...

  9. appscan如何扫描移动应用APP

    1.前置条件:让手机和电脑处于同一WIFI下 1打开appscan,选择手动探索/外部设备. 2在弹出的对话框页面点击右上角“记录代理配置”. 3在弹出的页面选择记录代理页签,设置Appscan代理端 ...

  10. Chapter 3 树与二叉树

    Chapter 3 树与二叉树 1-   二叉树 主要性质: 1   叶子结点数 = 度为2的结点数 + 1   2   二叉树第i层上最多有 (i≥1)个结点 3   深度为k的二叉树最多有 个结点 ...