[bzoj3813]奇数园
仿佛现在已经完成了做题之前先开个坑的习惯,也许是为了逼迫自己去刷一些神题吧。。。然并卵,该剩的好多坑还是剩着呢。
【bzoj3813】一道线段树好题。已经把数论忘光光了。
欧几里德算法
扩展欧几里德算法概述
= n / (p1 * p2 * p3 * …… * pn) * ((p1 - 1) * (p2 - 1) * (p3 - 1) * …… * (pn - 1))
这道题也是uoj的#38,uoj的blog上面有比较详细的解法,我看的陆爷的blog感觉写得蛮优美..
关于φ的求法有很多种,这里数字*π(pri[i]-1)/pri[i]即答案。只要60位记录一下状态即可。
呵呵哒,又get到一种逆元的新求法,不过没关系啦,考试的时候忘记了大不了写个quickmi
#include<cstdio>
#include<algorithm>
#define ll long long
#define mo 19961993
#define N 400050
using namespace std;
,n,tot=;
ll ni[],pri[];
struct node{
int l,r;
ll v;
}tree[][];
void calc(int f,int k,int val)
{
)tree[f][k].v=val;
else
{
tree[f][k].v=;
;i<=;i++)
)tree[f][k].v+=1ll<<(i-);
}
}
void update(int f,int p)
{
)tree[f][p].v=tree[f][p+p].v*tree[f][p+p+].v%mo;
].v;
}
void build(int f,int p,int l,int r)
{
tree[f][p].l=l;tree[f][p].r=r;;
if(l==r){
calc(f,p,);return;
}
build(f,p+p,l,mid);
build(f,p+p+,mid+,r);
update(f,p);
}
ll que(int f,int p,int x,int y)
{
;
if(x==l&&r==y)return tree[f][p].v;
if(y<=mid)return que(f,p+p,x,y);
,x,y);
else{
),mid+,y)%mo;
,mid+,y);
}
}
ll query(int xx,int yy)
{
ll tmp1=que(,,xx,yy),tmp2=que(,,xx,yy);
;i<=;i++)
))) tmp1 = tmp1*(pri[i]-) % mo * ni[pri[i]] %mo;
return tmp1;
}
void change(int p,int x,int y)
{
][p].l==x&&tree[][p].r==x){
tree[][p].v=y;tree[][p].v=;
;i<=;i++)
)tree[][p].v+=1ll<<(i-);
return;
}
][p].l+tree[][p].r)/;
,x,y);
tree[][p].v=tree[][p+p].v*tree[][p+p+].v%mo;
tree[][p].v=tree[][p+p].v|tree[][p+p+].v;
}
int main()
{
ni[]=;
int flag[N];
;i<M;i++)
{
ni[i] = -mo/i * ni[mo%i] % mo;
ni[i]=(ni[i]+mo)%mo;
){tot++;pri[tot]=i;}
;j<=tot;j++)
{
if(i*pri[j]>M)break;
flag[i*pri[j]]=;
)break;
}
}
build(,,,);
build(,,,);
scanf("%d",&n);
;i<=n;i++)
{
int op,x,y;
scanf("%d%d%d",&op,&x,&y);
)printf("%lld\n",query(x,y));
,x,y);
}
}
bzoj3813
这道题下午吃完午饭来写,困到最后只剩手在动也没啥知觉了。。。不写挂真是谢天谢地!
[bzoj3813]奇数园的更多相关文章
- [BZOJ3813] 奇数国 - 线段树
3813: 奇数国 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 912 Solved: 508[Submit][Status][Discuss] ...
- BZOJ3813: 奇数国
传送门 欧拉函数+线段树 因为只有60个素数,所以把状态压成long long的形式.用线段树维护区间和和区间和中有多少个质数.然后xjb搞搞就行了,具体参见代码. //BZOJ 3813 //by ...
- [bzoj3813] 奇数国 [线段树+欧拉函数]
题面 传送门 思路 这题目是真的难读......阅读理解题啊...... 但是理解了以后就发现,题目等价于: 给你一个区间,支持单点修改,以及查询一段区间的乘积的欧拉函数值,这个答案对19961993 ...
- 【BZOJ3813】奇数国 线段树+欧拉函数
[BZOJ3813]奇数国 Description 给定一个序列,每次改变一个位置的数,或是询问一段区间的数的乘积的phi值.每个数都可以表示成前60个质数的若干次方的乘积. Sample Input ...
- 【bzoj3813】: 奇数国 数论-线段树-欧拉函数
[bzoj3813]: 奇数国 题意:给定一个序列,每个元素可以分解为最小的60个素数的形式.(x=p1^k1*p2^k2*......p60^k60)(p1=2,p2=3,…,p60=281) 支持 ...
- 【BZOJ3813】【清华集训2014】奇数国 线段树 数学
题目描述 给你一个长度为\(n\)的数列,第\(i\)个数为\(a_i\).每个数的质因子都只有前\(60\)个质数.有\(q\)个询问,每次给你\(l,r\),求\(\varphi(\prod_{i ...
- 【bzoj3813】奇数国 线段树
题目描述 给出一个长度为n的序列,每个数都可以由前60个质数的乘积表示,初始每个数都是3.支持两种操作:(1)修改一个数 (2)查询一段区间内所有数的乘积的欧拉函数值模19961993. 输入 第一行 ...
- 剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面
一.题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 例如有以下一个整数数组:12345 ...
- ZooKeeper 02 - ZooKeeper集群的节点为什么是奇数个
目录 1 关于节点个数的说明 2 ZooKeeper集群的容错数 3 ZooKeeper集群可用的标准 4 为什么不能是偶数个节点 4.1 防止由脑裂造成的集群不可用 4.2 奇数个节点更省资源 4. ...
随机推荐
- js正则匹配以固定格式结尾的字符串并匹配是手机访问,则跳转
<script> //var pcUrl = "http://res.meadin.com/HotelData/98986_1.shtml"; var pcUrl = ...
- rabbitmq_config
https://github.com/rabbitmq/rabbitmq-server/blob/stable/docs/rabbitmq.config.example %% ---------- ...
- 柔性数组 data[0]
struct MyData { int nLen; char data[0];}; 在结构中,data是一个数组名:但该数组没有元素:该数组的真实地址紧随结构体MyData之后,而这个地址 ...
- 素数环(dfs+回溯)
题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...
- PostgreSQL中COUNT的各条件下(1亿条数据)例子
test=# insert into tbl_time1 select generate_series(1,100000000),clock_timestamp(),now(); INSERT 0 1 ...
- elk深度解析
上面的两张图是elk的一个架构 下面是对logstash分析:如下图 可以看出 logstash的一个角色shipper,(是通过配置文件来决定logstash是shipper还是indexer)注意 ...
- Java 解析XML的几种方法
XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便. XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已. 基本的解析方式 ...
- PHP中比较两个时间的大小与日期的差值
在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst]) 其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的 ...
- 重温WCF之数单向通讯、双向通讯、回调操作(五)
一.单向通讯单向操作不等同于异步操作,单向操作只是在发出调用的瞬间阻塞客户端,但如果发出多个单向调用,WCF会将请求调用放入到服务器端的队列中,并在某个时间进行执行.队列的存储个数有限,一旦发出的调用 ...
- 关于python装饰器(Decorators)最底层理解的一句话
一个decorator只是一个带有一个函数作为参数并返回一个替换函数的闭包. http://www.xxx.com/html/2016/pythonhexinbiancheng_0718/1044.h ...