【bzoj3813】: 奇数国 数论-线段树-欧拉函数
题意:给定一个序列,每个元素可以分解为最小的60个素数的形式。(x=p1^k1*p2^k2*......p60^k60)(p1=2,p2=3,…,p60=281)
支持单点修改,查询一段区间的积的欧拉函数 mod 19961993(是一个质数)。
线段树维护区间积x,bitset b[i]记录第i个素数是否存在。
预处理inv[i]=(p[i]-1)/p[i] mod 19961993
ans=x*inv[i] (b[i]==1)
/* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <bitset>
#define LL long long
using namespace std;
const int P=;
const int N=;
const int prime[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
const int inv[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,}; struct data{
bitset <> b;
LL x;
data (LL x=){
if (x==){
this->x=;
this->b.reset();
}else{
this->x=x;
for (int i=;i<;i++){
if (!(x%prime[i])) this->b[i]=;
}
}
}
};
data operator + (const data &a,const data &b){
data c;
c.b=a.b|b.b; c.x=a.x*b.x%P;
return c;
}
struct seg{
data d;
seg *ls,*rs;
} t[N*+]; seg *root,*NEW=t;
seg *new1(){ return ++NEW;} #define mid (ll+rr)/2
void build(seg *p,int ll,int rr){
if (ll==rr){
p->d=data();
}else{
build(p->ls=new1(),ll,mid);
build(p->rs=new1(),mid+,rr);
p->d=p->ls->d+p->rs->d;
}
} void modify(seg *p,int ll,int rr,int x,data d){
if (ll==rr){
p->d=d;
}else{
if (x<=mid) modify(p->ls,ll,mid,x,d);
if (x>mid) modify(p->rs,mid+,rr,x,d);
p->d=p->ls->d+p->rs->d;
}
} data query(seg *p,int ll,int rr,int l,int r){
data ans=data();
if (l<=ll && r>=rr){
ans=ans+p->d;
}else{
if (l<=mid) ans=ans+query(p->ls,ll,mid,l,r);
if (r>mid) ans=ans+query(p->rs,mid+,rr,l,r);
}
return ans;
} LL cal(data d){
LL ans=d.x;
for (int i=;i<;i++){
if (d.b[i]==){
ans=ans*inv[i]%P;
}
}
return ans;
} int n; int main(){
scanf("%d",&n);
build(root=new1(),,N);
for (int i=;i<=n;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if (a==){
printf("%lld\n",cal(query(root,,N,b,c)));
}else{
modify(root,,N,b,data(c));
}
}
return ;
}
【bzoj3813】: 奇数国 数论-线段树-欧拉函数的更多相关文章
- [bzoj3813] 奇数国 [线段树+欧拉函数]
题面 传送门 思路 这题目是真的难读......阅读理解题啊...... 但是理解了以后就发现,题目等价于: 给你一个区间,支持单点修改,以及查询一段区间的乘积的欧拉函数值,这个答案对19961993 ...
- BZOJ 3813--奇数国(线段树&欧拉函数&乘法逆元&状态压缩)
3813: 奇数国 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 755 Solved: 432[Submit][Status][Discuss] ...
- Please, another Queries on Array?(Codeforces Round #538 (Div. 2)F+线段树+欧拉函数+bitset)
题目链接 传送门 题面 思路 设\(x=\prod\limits_{i=l}^{r}a_i\)=\(\prod\limits_{i=1}^{n}p_i^{c_i}\) 由欧拉函数是积性函数得: \[ ...
- 线段树+欧拉函数——cf1114F
调了半天,写线段树老是写炸 /* 两个操作 1.区间乘法 2.区间乘积询问欧拉函数 欧拉函数计算公式 phi(mul(ai))=mul(ai) * (p1-1)/p1 * (p2-1)/p2 * .. ...
- 【BZOJ3813】奇数国 线段树+欧拉函数
[BZOJ3813]奇数国 Description 给定一个序列,每次改变一个位置的数,或是询问一段区间的数的乘积的phi值.每个数都可以表示成前60个质数的若干次方的乘积. Sample Input ...
- Please, another Queries on Array? CodeForces - 1114F (线段树,欧拉函数)
这题刚开始看成求区间$\phi$和了........先说一下区间和的做法吧...... 就是说将题目的操作2改为求$(\sum\limits_{i=l}^{r}\phi(a[i]))\%P$ 首先要知 ...
- BZOJ4869 六省联考2017相逢是问候(线段树+欧拉函数)
由扩展欧拉定理,a^(a^(a^(……^x)))%p中x作为指数的模数应该是φ(φ(φ(φ(……p)))),而p取log次φ就会变为1,也即每个位置一旦被修改一定次数后就会变为定值.线段树维护区间剩余 ...
- BZOJ 4026: dC Loves Number Theory 可持久化线段树 + 欧拉函数 + 数学
Code: #include <bits/stdc++.h> #define ll long long #define maxn 50207 #define setIO(s) freope ...
- BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数
BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...
随机推荐
- hihoCoder#1122(二分图最大匹配之匈牙利算法)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上一回我们已经将所有有问题的相亲情况表剔除了,那么接下来要做的就是安排相亲了.因为过年时间并不是很长,所以姑姑希望能够尽可 ...
- python第十一天-----补:缓存操作
memcached,首先下载python-memcached模块,在cmd中执行pip install python-memcached即可 memcached比较简单,默认情况仅支持简单的kv存储, ...
- 【Python环境】matplotlib - 2D 与 3D 图的绘制
2015-10-30数据科学自媒体 类MATLAB API 最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数. 让我们加载它: from pylab import ...
- DAY8-python之网络编程
一.客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...
- 9-EasyNetQ之基于主题的路由
RabbitMQ有一个很酷的功能,基于主题的路由,这个功能允许订阅者基于多个条件去过滤消息.一个主题是由点号分隔的单词列表,随消息一同发布.例如:"stock.usd.nyse" ...
- Internet Intranet Extranet
Internet: There's only one of it, and you're on it now. Intranet: An internal network local to a com ...
- Android广播接收者
其实,在什么是广播的第一句就已经说明了广播有什么用了.对了,笼统一点讲就是用来传输数据的.具体一点说就是:1. 实现了不同的程序之间的数据传输与共享,因为只要是和发送广播的action相同的接受者都能 ...
- android task stack
http://www.android100.net/html/201402/22/5690.html
- 奇葩问题 eclipse下 maven项目 java Resource报个小红叉,然而里面却没有小红叉
之前没注意,不知是一开始就有还是这两天才有,说下解决方案: 右击项目“Properties”,在弹出的“Properties”的左侧边框,单击“Project Facets”,打开“Project F ...
- HDU 4348(主席树 标记永久化)
题面一看就是裸的数据结构题,而且一看就知道是主席树... 一共四种操作:1:把区间[l, r]的数都加上d,并且更新时间.2:查询当前时间的区间和.3:查询历史时间的区间和.4:时光倒流到某个时间. ...