hdu 4407 Sum 容斥+当前离线
乞讨X-Y之间p素数,,典型的纳入和排除问题,列的求和运算总和的数,注意,第一项是最后一个项目数。
如果不改变到第一记录的答案,脱机处理,能保存查询,候,遇到一个操作1,就遍历前面的操作。把改动加上去,注意要判重。仅仅保留最后一次改动。
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iostream>
#include<cstring>
using namespace std;
typedef long long ll;
ll ans;
int pri[1234];
int top;
int n,m,a,b,c;
ll gcd(ll a,ll b)
{
return a%b==0? b:gcd(b,a%b);
}
ll cal(ll num)
{
int x=a;
int y=b;
int fir;
int tmp=y/num-x/num;
if(x%num==0) fir=x,tmp++;
else fir=num*(x/num+1);
if(fir>y) return 0;
int en=fir+(tmp-1)*num;
return (fir+en)*1ll*tmp/2;
}
void dfs(int p,ll num,int flag)
{
if(num>b) return;
if(p) {ans+=flag*cal(num);}
for(int i=p+1;i<top;i++)
{
dfs(i,pri[i]*num,-flag);
}
}
ll out[1234];
int d[1234][4];
int rec[1234][2];
bool vis[400005];
bool V[400005];
int prime[400005];
int topp=0;
void sieve(int n)
{
int m= (int)sqrt(n+0.5);
for(int i=2;i<=m;i++)
{
if(!V[i])
{
for(int j=i*i;j<=n;j+=i)
V[j]=1;
}
}
V[1]=1;
for(int i=2;i<=400000;i++)
{
if(V[i]==0) prime[topp++]=i;
}
}
int main()
{
sieve(400005);
int cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d",&n,&m);
int op;
for(int i=1;i<=m;i++)
{
scanf("%d",&op);
d[i][0]=op;
if(op==1)
{
ans=0;
top=1;
scanf("%d%d%d",&a,&b,&c);
d[i][1]=a;
d[i][2]=b;
d[i][3]=c;
if(c==1)
{
out[i]=(a+b)*1ll*(b-a+1)/2;
continue;
}
for(int j=0;prime[j]*prime[j]<=c;j++)
{
if(V[c]==0) break;
if(c%prime[j]==0)
{
pri[top++]=prime[j];
while(c%prime[j]==0) c/=prime[j];
}
}
if(c>1) pri[top++]=c;
dfs(0,1,-1);
out[i]=(a+b)*1ll*(b-a+1)/2-ans;
}
else
{
scanf("%d%d",&b,&c);
d[i][1]=b;
d[i][2]=c;
}
}
for(int i=1;i<=m;i++)
{
if(d[i][0]==1)
{
ll ans=out[i];
int cnt=0;
for(int j=i-1;j>=1;j--)
{
if(d[j][0]==2&&!vis[d[j][1]])
{
vis[d[j][1]]=true;
rec[cnt][0]=d[j][1];
rec[cnt][1]=d[j][2];
cnt++;
}
}
for(int j=0;j<cnt;j++)
{
vis[rec[j][0]]=false;
if(rec[j][0]>=d[i][1]&&rec[j][0]<=d[i][2])
{
ans-=( gcd(rec[j][0],d[i][3])==1?rec[j][0]:0 );
ans+=( gcd(rec[j][1],d[i][3])==1?rec[j][1]:0 );
}
}
printf("%I64d\n",ans);
}
}
}
return 0;
}
/*
123
100 1
1 1 10 11
2 2 3
2 2 5
1 1 10 2
*/
版权声明:本文博主原创文章,博客,未经同意不得转载。
hdu 4407 Sum 容斥+当前离线的更多相关文章
- HDU - 4407 Sum (容斥)
题意:初始序列[1..N](1<=N<=4e5),支持两种操作:1.求区间[x,y]内与p互素的数之和: 2.将x位置的数变为c. 分析:很容易把人骗到线段树的思维中,而实际上操作2单点的 ...
- hdu 5514 Frogs(容斥)
Frogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU 5213 分块 容斥
给出n个数,给出m个询问,询问 区间[l,r] [u,v],在两个区间内分别取一个数,两个的和为k的对数数量. $k<=2*N$,$n <= 30000$ 发现可以容斥简化一个询问.一个询 ...
- HDU 2588 思维 容斥
求满足$1<=X<=N ,(X,N)>=M$的个数,其中$N, M (2<=N<=1000000000, 1<=M<=N)$. 首先,假定$(x, n)=m$ ...
- HDU 5514 Frogs 容斥定理
Frogs Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5514 De ...
- HDU 1695 GCD 容斥
GCD 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1695 Description Given 5 integers: a, b, c, d, k ...
- hdu 1695 GCD 容斥+欧拉函数
题目链接 求 $ x\in[1, a] , y \in [1, b] $ 内 \(gcd(x, y) = k\)的(x, y)的对数. 问题等价于$ x\in[1, a/k] , y \in [1, ...
- HDU - 4135 Co-prime 容斥定理
题意:给定区间和n,求区间中与n互素的数的个数, . 思路:利用容斥定理求得先求得区间与n互素的数的个数,设表示区间中与n互素的数的个数, 那么区间中与n互素的数的个数等于.详细分析见求指定区间内与n ...
- HDU 4135 Co-prime (容斥+分解质因子)
<题目链接> 题目大意: 给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数. ...
随机推荐
- Effective C++规定45 额外的代码
这部分是额外的代码博客,关键45术语思想已经实现. #include<iostream> using namespace std; template<typename T> c ...
- IOT(Index Organized Table)
我们知道一般的表都以堆(heap)的形式来组织的,这是无序的组织方式.Oracle还提供了一种有序的表,它就是索引组织表,简称IOT表.IOT表上必须要有主键,而IOT表本身不对应segment,表里 ...
- Sliverlight之 画刷
1,5种画刷 (见Project15) (1)TextBlock控件中的Forground和BackGround属性是一个什么对象?它在前台的完整的写法是什么?(实际是.net做了一个转换,可以直接写 ...
- ZooKeeper实践方案:(7) 分布式锁
1.基本介绍 分布式锁是控制分布式系统之间同步訪问共享资源的一种方式,须要相互排斥来防止彼此干扰来保证一致性. 利用Zookeeper的强一致性能够完毕锁服务.Zookeeper的官方文档是列举了两种 ...
- HDU 5050 Divided Land(进制转换)
题意 给你两个二进制数m,n 求他们的最大公约数 用二进制表示 0<m,n<2^1000 先把二进制转换为十进制 求出最大公约数 再把结果转换为二进制 数比較大要用到大数 ...
- ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件
原文:ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件 第二章 继承于WebControl的自定义控件 到现在为止,我已经写了三篇关于自定义控件开发的文章,很感谢大家的支 ...
- 2015最新iherb海淘攻略-图文入门教程
IHerb是美国最热门的海淘海购网站之中的一个,适合不爱担心,怕麻烦的朋友入门海淘,由于它有中文页面,可直邮中国,上千个母婴用品.化妆品.保健品品牌,最重要的是!首次下单,价值$40及以上的订单会马上 ...
- myEclipse项目部署按钮失效了,怎么办?
myEclipse项目部署按钮失效了,按了以后没反应,怎么办? 步骤如下: 1.首先关闭MyEclipse. 2.然后删除Workspaces目录(存放您MyEclipse项目的地方)下的 " ...
- 具体的了解“>/dev/null 2>&1”
Linux系统中不管是crontab里面.还是平时使用的命令.常常会碰到">/dev/null 2>&1".比方说:在Crontab Job里面,假设不想发送邮 ...
- form 为什么上传文件enctype现场
FORM要素enctype属性指定表单数据server当提交所使用的编码类型,默认默认值它是"application/x-www-form-urlencoded". 这样的编码方式 ...