Bzoj 3813 奇数国 题解 数论+线段树+状压
3813: 奇数国
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 748 Solved: 425
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
013
115
013
117
013
023
Sample Output
24
36
6
explanation
初始化每个国家存款都为3;
1到3的product为27,[1,27]与27不相冲的有18个数;
1的存款变为5;
1到3的product为45,[1,45]与45不相冲的有24个数;
1的存款变为7;
1到3的product为63,[1,63]与63不相冲的有36个数;
2到3的product为9,[1,9]与9不相冲的有6个数。
HINT
x≤100000,当ai=0时0≤ci−bi≤100000
Source
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
#include <vector>
#define N 100005
using namespace std;
int n,p=;
long long ksm(long long x,long long z)
{
long long ans=;
while(z)
{
if(z&)
{
ans*=x;
ans%=p;
}
x*=x;x%=p;
z>>=;
}
return ans;
}
int zz,ss[];
struct no{
int left,right,mid;
long long data,pp;
}node[N*];
void build(int left,int right,int x)
{
node[x].left=left,node[x].right=right;
node[x].pp|=(<<1ll);
if(left==right)
{
node[x].data=;
return;
}
int mid=(left+right)>>;
node[x].mid=mid;
build(left,mid,x*);
build(mid+,right,*x+);
node[x].data=node[*x].data*node[*x+].data;
node[x].data%=p;
}
void change(int to,int x,long long z)
{
if(node[x].left==node[x].right)
{
node[x].data=z;
node[x].pp=;
for(int i=;i<=zz;i++)
{
if(z%ss[i]==) node[x].pp|=(1ll<<(i-1ll));
}
return;
}
int mid=node[x].mid;
if(to>mid)change(to,*x+,z);
else change(to,*x,z);
node[x].data=node[*x].data*node[*x+].data;
node[x].data%=p;
node[x].pp=node[*x].pp|node[*x+].pp;
}
long long pp;
long long get(int left,int right,int x)
{
if(node[x].left==left&&node[x].right==right)
{
pp|=node[x].pp;
return node[x].data;
}
int mid=node[x].mid;
if(left>mid)return get(left,right,*x+);
else if(right<=mid)return get(left,right,*x);
else return get(left,mid,*x)*get(mid+,right,*x+)%p;
}
long long ni[];
void init()
{
for(int i=;zz<;i++)
{
zz++;
ss[zz]=i;
for(int j=;j<=sqrt(i);j++)
{
if(i%j==)
{
ss[zz]=;
zz--;
break;
}
}
}
for(int i=;i<=;i++)ni[i]=ksm(ss[i],p-);
}
int main()
{
init();
scanf("%d",&n);
build(,,);
for(int i=;i<=n;i++)
{
int op;
scanf("%d",&op);
if(op)
{
long long x,y;
scanf("%lld%lld",&x,&y);
change(x,,y);
}
else
{
long long x,y;
pp=;
scanf("%d%d",&x,&y);
long long pro=get(x,y,);
long long ans=pro;
for(int i=;i<=zz;i++)
{
if(pp&(1ll<<(i-1ll)))
{
ans*=ni[i];
ans%=p;
ans*=(ss[i]-);
ans%=p;
}
}
printf("%lld\n",ans);
}
}
return ;
}
Bzoj 3813 奇数国 题解 数论+线段树+状压的更多相关文章
- HYSBZ - 3813 奇数国 欧拉函数+树状数组(线段树)
HYSBZ - 3813奇数国 中文题,巨苟题,巨无敌苟!!首先是关于不相冲数,也就是互质数的处理,欧拉函数是可以求出互质数,但是这里的product非常大,最小都2100000,这是不可能实现的.所 ...
- [BZOJ 3813]奇数国
3813: 奇数国 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 736 Solved: 416[Submit][Status][Discuss] ...
- hdu 5023 线段树+状压
http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...
- POJ:2777-Count Color(线段树+状压)
Count Color Time Limit: 1000MS Memory Limit: 65536K Description Chosen Problem Solving and Program d ...
- POJ 3468 线段树+状压
题意:给你n个数,有对区间的加减操作,问某个区间的和是多少. 思路:状压+线段树(要用lazy标记,否则会TLE) //By SiriusRen #include <cstdio> #in ...
- HDU_3071 Gcd & Lcm game 【素数分解 + 线段树 + 状压】
一.题目 Gcd & Lcm game 二.分析 非常好的一题. 首先考虑比较暴力的做法,肯定要按区间进行处理,对于$lcm$和$gcd$可以用标准的公式进行求,但是求$lcm$的时候是肯定 ...
- poj2777Count Color——线段树+状压
题目:http://poj.org/problem?id=2777 状压每个颜色的选择情况,取答案时 | 一番: 注意题目中的区间端点可能大小相反,在读入时换一下位置: 注意pushdown()中要l ...
- 【bzoj4006】[JLOI2015]管道连接 斯坦纳树+状压dp
题目描述 给出一张 $n$ 个点 $m$ 条边的无向图和 $p$ 个特殊点,每个特殊点有一个颜色.要求选出若干条边,使得颜色相同的特殊点在同一个连通块内.输出最小边权和. 输入 第一行包含三个整数 n ...
- Bzoj 1756: Vijos1083 小白逛公园 线段树
1756: Vijos1083 小白逛公园 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1021 Solved: 326[Submit][Statu ...
随机推荐
- C#:foreach语句,yield语句
原文:C#:foreach语句,yield语句 1. foreach语句 C#编译器会把foreach语句转换为IEnumerable接口的方法和属性. foreach (Person p in pe ...
- Win10《芒果TV》商店版更新v3.2.3:新增应用内意见反馈、播放重试、透明磁贴
在2016圣诞节临近之际,<芒果TV>UWP版迅速更新v3.2.3版,主要是新增应用内意见反馈提交功能.播放重试.透明磁贴.动态磁贴等功能,进一步优化稳定性.视觉细节.运行速度. 芒果TV ...
- Android零基础入门第63节:过时但仍值得学习的选项卡TabHost
原文:Android零基础入门第63节:过时但仍值得学习的选项卡TabHost 由于前几天参加一个学习培训活动,几乎每天都要从早晨7点到晚上一两点,没有什么时间来分享,实在抱歉中间断更了几天.从今天开 ...
- jconsole远程监控logstash agent
在logstash的jvm.options文件末尾添加: -Dcom.sun.management.jmxremote.port=9999 //指定jmx端口-Dcom.sun.managemen ...
- c# html网页源代码浏览器显示
//环境VS2008,WIN7SP1 //背景:人人网自动登陆,需要把读取到的html源代码显示出来, //test.txt 为html源代码 private void Form1_Load(obje ...
- 不仅仅是百万级TCP长连接框架 t-io
t-io: 不仅仅是百万级TCP长连接框架 t-io是基于jdk aio实现的易学易用.稳定.性能强悍.将多线程运用到极致.内置功能丰富的即时通讯框架(广义上的即时通讯,并非指im),字母 t 寓意t ...
- Hexo+NexT(六):手把手教你编写一个Hexo过滤器插件
Hexo+NexT介绍到这里,我认为已经可以很好地完成任务了.它所提供的一些基础功能及配置,都已经进行了讲解.你已经可以随心所欲地配置一个自己的博客环境,然后享受码字的乐趣. 把博客托管到Github ...
- MySQL 事务嵌套
MySQL默认自动提交(autocommit=1),如果要开启事务,先关闭自动提交(autocommit=0): InnoDB支持事务,MyISAM不支持: MySQL不支持事务嵌套:已经开启事务后, ...
- vue项目接入api接口
我们在做项目时,一切基础在于数据上面,所以接入api接口是关键. 访问接口是我们会遇到跨域,而,vue-cli给我们提供了反向代理,所以我们只需要配置一下就可以了. 在config文件中找到index ...
- JS数据结构第四篇 --- 栈
一.什么是数据结构栈 在数据结构中有一个栈结构,在内存空间中也有一个栈空间,这两个”栈“是两个不同的概念.这篇我们说的是数据结构中的栈.栈是一种特殊的线性表,特殊性在哪?就是只能在栈顶进行操作,往栈顶 ...