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. 我最恨ubuntu的自动升级内核功能

    总是提示我boot分区空间不足, 怎么办, 删除原有不用的内核呗,手动来做. 1.查看当前使用内核版本号.输入 uname -a 查看.uname -a 2.删除旧内核. 切换root: su 输入命 ...

  2. Java Annotation试用

    Java的很多特性了解的差不多了,比如多线程,io,集合类诸如此类的,但是都没做总结,今天恰好用了Annotation,所以就稍微总结下吧. 要用Annotation首先要搞懂元注解 元注解的作用就是 ...

  3. Activiti表单(Form key)

    1.设置Form key如图: 2.根据任务id得到Form key TaskFormData formData = formService.getTaskFormData(taskId);; Str ...

  4. 《Practices of an Agile Developer:Woring in the Real World》读书笔记 PB16110698(~3.22)第三周

    <Practices of an Agile Developer:Woring in the Real World>读书笔记  本周我阅读了<高效程序员的45个习惯:敏捷开发修炼之道 ...

  5. Lua 协程和线程区别

    协程就是协程,不是线程. CPU执行单位是线程,不是什么协程. 协程,是同步执行,不是并行,只是切了一个上下文了,为你保存原来的上下文而已. 切到第二个协程时,原来的协程处于挂起状态. 这个特指lua ...

  6. (转)Unity3D手游开发实践

    作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). (转)& ...

  7. <<十二怒汉>>影评——程序正义,结果正义?

    <>影评--程序正义,结果正义? 这是一部黑白的,场景简单的(全电影的发生地只是一个房间),无趣且不讨喜的电影,但是这同时又是一部伟大的,深邃的,每个人看过之后都会陷入深深思考的电影.好的 ...

  8. 杂项-公司:SAMSUNG

    ylbtech-杂项-公司:SAMSUNG 三星集团是韩国最大的跨国企业集团,同时也是上市企业全球500强,三星集团包括众多的国际下属企业,旗下子公司有:三星电子.三星物产.三星航空.三星人寿保险等, ...

  9. 模板——Treap

    不得不说平衡树博大精深,除了Treap,还有splay,非旋Treap和可持久化数据结构,今天先讲讲Treap,也很感谢这位大佬的博客给予我帮助:http://www.360doc.com/conte ...

  10. codeforces 1136E-Nastya Hasn't Written a Legend

    传送门:QAQQAQ 题意:有一个数组a和一个数组k,数组a一直保持一个性质:a[i + 1] >= a[i] + k[i].有两种操作:1,给某个元素加上x,但是加上之后要保持数组a的性质.比 ...