CF594D题解
我不会数据结构/kk
我想题意应该十分清楚了。
我们知道 \(\varphi(p^k)=p^{k-1}(p-1)\),那么我们考虑将一个询问下放到右端点,然后往右移动右端点并更新每个左端点到右端点的答案。
这就变得很容易了。最开始所有位置的答案都是 \(1\)。
加入一个数 \(a\) 的时候,因为积性函数可以拆成质数幂处的积性函数之积,所以我们这里也考虑拆成质数幂。
然后记录每一个质因子上一次出现的位置,假设为 \(x\),现在的右端点为 \(i\),那么我们令 \((x,i]\) 乘上 \(p-1\),\([1,x]\) 乘上 \(p\),剩下的位置乘上 \(p^{k-1}\)。
可以知道复杂度是 \(O(n\log n\frac {\log V}{\log\log V})\) 的。这个复杂度不知道是在哪儿看到的,反正 1e6 以内绝对不会超过 7。
这个拿线段树做就好了。
然后我们发现是单点查询,所以对标记可持久化。然后使用 zkw 线段树加上快读你就可以拿到 lg 最优解。
甚至能在 CF 上面卡进第一页。。。
实际上还有更为厉害的方法。。。
考虑每个位置的初始值都是 \(a_i\),每次往右扫时将 \(p\) 变为 \(p-1\),线段树的操作次数是我的三分之一。。。
而且这个玩意儿是可以使用树状数组的。。。
不管怎样先把我的代码挂在这里了:
#include<iostream>
#include<cctype>
#include<vector>
typedef unsigned ui;
const ui M=2e5+5,mod=1e9+7;
ui n,m,G,a[M],l[M],r[M],ans[M],prod[M<<2];ui top,pri[M*5],pos[M*5],lst[M*5];std::vector<ui>id[M];
char _input[1<<25|1],_output[1<<25|1],*_p1=_input,*_p2=_output;
inline ui read(){
ui n(0);char s;while(!isdigit(s=*_p1++));while(n=n*10+(s&15),isdigit(s=*_p1++));return n;
}
inline void write(ui&n){
static char s[10];ui top(0);while(s[++top]=n%10^48,n/=10);while(*_p2++=s[top],--top);
}
inline void sieve(const ui&M){
ui i,j,x;
for(i=2;i<=M;++i){
if(!pos[i])pri[pos[i]=++top]=i;
for(j=1;j<=pos[i]&&(x=i*pri[j])<=M;++j)pos[x]=j;
}
}
void Modify(ui l,ui r,const ui&V){
for(l+=G-1,r+=G+1;l^r^1;l>>=1,r>>=1){
if(~l&1)prod[l^1]=1ull*prod[l^1]*V%mod;
if(r&1)prod[r^1]=1ull*prod[r^1]*V%mod;
}
}
inline ui Query(ui x){
ui ans(1);x+=G;while(x)ans=1ull*ans*prod[x]%mod,x>>=1;return ans;
}
signed main(){
std::cin.read(_input,sizeof _input);
ui i,x(0),y,t;n=read();for(G=1;G<=n+1;G<<=1);for(i=1;i<=n+G;++i)prod[i]=1;
for(i=1;i<=n;++i)(a[i]=read())>x&&(x=a[i]);Build(1);sieve(x);m=read();
for(i=1;i<=m;++i)l[i]=read(),r[i]=read(),id[r[i]].push_back(i);
for(i=1;i<=n;++i){
for(x=a[i];x^1;){
if(pos[x]^1)Modify(lst[pos[x]]+1,i,pri[pos[x]]-1);if(lst[pos[x]])Modify(1,lst[pos[x]],pri[pos[x]]);
lst[y=pos[x]]=i;t=1;while(pos[x/pri[y]]==pos[x])t*=pri[y],x/=pri[y];x/=pri[y];if(t^1)Modify(1,i,t);
}
for(ui&ID:id[i])ans[ID]=Query(l[ID]);
}
for(i=1;i<=m;++i)write(ans[i]),*_p2++=10;std::cout.write(_output,_p2-_output);
}
CF594D题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
1. 这里所说的"匿名内部类"主要是指在其外部类的成员方法内定义,同时完成实例化的类,若其访问该成员方法中的局部变量,局部变量必须要被final修饰.2. 原因是编译程序实现上的困 ...
- 群聊(udp)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- SpringDataJpa打印Sql详情(含参数)
Spring Data Jpa打印Sql详情(带sql参数) 这里使用的是 log4jdbc,yml配置文件里的数据源配置也要做相应的修改 pom文件引入 <dependency> < ...
- WEB前端开发--2(HTML基础)
HTML基础 HTML不分大小写 1.HTML概述 HTML(HyperText MarkUp Language)"超文本标记语言",他是制作网页的标准语言 1.1 标签--元素 ...
- Docker使用Dockerfile构建新的镜像
构建镜像步骤; 1.创建Dockerfile文件,该文件是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明. vim Dockerfile //每一个指令都会在镜像上创建一个新 ...
- Elasticsearch按请求体基本查询
1 分页: localhost:9200/get-together/_search {"query": {"match_all": {}},"from ...
- C1 能力认证——Web进阶
C1 能力认证--Web进阶 DOM节点操作-上 名称 描述 getElementById() 获取带有指定id的节点 getElementsByTagName() 获取带有指定标签名的节点集合 qu ...
- pypi服务器搭建
pypi服务器搭建 [root@localhost ~]# hostnamectl set-hostname --static pypi-server [root@pypi-server ~]# yu ...
- .Net Core Aop之IResourceFilter
一.简介 在.net core 中Filter分为一下六大类: 1.AuthorizeAttribute(权限验证) 2.IResourceFilter(资源缓存) 3.IActionFilter(执 ...
- LibOpenCM3(一) Linux下命令行开发环境配置
目录 LibOpenCM3(一) Linux下命令行开发环境配置 本文使用 Linux 环境, 硬件为 STM32F103 系列开发板 LibOpenCM3 介绍 LibOpenCM3 是GPL协议( ...