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互质的数的个数. ...
随机推荐
- Java笔试题1
1. 下面的代码执行后,什么结果输出是? String s1 = new String("Test"); String s2 = new String("Test&quo ...
- 使用LabVIEWPC的制备
使用LabVIEWPC的制备 1.下载.安装LabVIEW 如今,互联网搜索,你可以搜索出一大推LabVIEW下载并安装破解教程.因此,这里没有具体描述的.请自行百度~~.另外.提醒一下,下载LabV ...
- 【JUnit4.10来源分析】0导航
JUnit靠GOF 中的一个Erich Gamma和 Kent Beck 单元测试框架编写一个开源,yqj2065分析JUnit的主要目的是源 中学习对设计模式的运用. JUnit也是一个学习Java ...
- shell split分析日志文件
在处理的文件comment有如下格式: ............................ xxx.xxx.10.59 db1059 mynbdpdatadb.idc4. dbname R620 ...
- 【安卓笔记】高速的发展设置界面-----PreferenceActivity
通常app都会有一个设置界面,例如以下: 通常做法是自定义布局,然后在代码里面加入响应函数,并将结果保存到Sharedpreferences中. android给我们提供了PreferenceActi ...
- checkbox的attr("checked")一直以来,undefined问题解决
最近,屌丝要项目开发的需要,需要一个完整的选checkbox特征. 该死的~~这不是很easy什么东西,共checkbox,N多个子的checkbox,总checkbox一旦选定,儿checkbox所 ...
- 【Web探索之旅】第三部分第三课:协议
内容简介 1.第三部分第三课:协议 2.第四部分预告:Web程序员 第三部分第三课:协议 之前的课,我们学习了Client-Server模型的客户端语言和服务器语言. 客户端语言有HTML,CSS和J ...
- 从头开始编写项目Makefile(八):型号规则
[版权声明:转载请保留源:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 上创建的文件夹谈及.没有生产目标文件到相应的文件夹,在这里 ...
- Cocos2d-x 如何输出 Android用电话 腰带Tag的Log刊物
于Cocos2d-x根据代码 #if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) #define LOGAnroid( ...) #else if (CC_TAR ...
- ACdream: ACfun
ACfun Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatisti ...