HDU 4407
http://acm.hdu.edu.cn/showproblem.php?pid=4407
把修改和询问分成两部分解决
询问求区间内与p不互素的和,和求个数一样,用容斥原理解决,只不过做容斥的时候把每一段的个数改成每一段的和,这个求和的方式我一下写搓了,导致这道题坑了很久
修改用map记录,每次扫一遍即可,原数和c互素就减掉,修改完的数和c互素就加上去,logn*m^2的复杂度
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <cmath> using namespace std; typedef __int64 ll; ll gcd(ll a,ll b){
return b==?a:gcd(b,a%b);
} ll sum(ll l,ll r,ll k){
ll num=r/k-(l-)/k;
ll front;
if(l%k==)front=l;
else front=(k-l%k)+l;
ll rear=r-r%k;
return (front+rear)*num/;
} ll gao(ll l,ll r,ll n){
vector <ll> v;
for(ll i=;i*i<=n;i++){
if(n%i==){
v.push_back(i);
while(n%i==)n/=i;
}
}
if(n>)v.push_back(n);
int m=v.size();
ll res=;
for(int i=;i<(<<m);i++){
int cnt=;
ll val=;
for(int j=;j<m;j++){
if(i&(<<j)){
cnt++;
val*=v[j];
}
}
if(cnt&)res+=sum(l,r,val);
else res-=sum(l,r,val);
}
return (l+r)*(r-l+)/-res;
} map <ll,ll> mp;
map <ll,ll>::iterator it; ll gan(ll x,ll y,ll p){
ll res=gao(x,y,p);
for(it=mp.begin();it!=mp.end();it++){
if(it->first>y || it->first<x)continue;
if(gcd(it->first,p)==)res-=it->first;
if(gcd(it->second,p)==)res+=it->second;
}
return res;
} int main(){
int T;
scanf("%d",&T);
while(T--){
int n,m;
scanf("%d%d",&n,&m);
mp.clear();
while(m--){
int op;
scanf("%d",&op);
ll x,y,p;
if(op==){
scanf("%I64d%I64d%I64d",&x,&y,&p);
if(x>y)swap(x,y);
printf("%I64d\n",gan(x,y,p));
}
else{
scanf("%I64d%I64d",&x,&p);
mp[x]=p;
}
}
}
return ;
}
HDU 4407的更多相关文章
- hdu 4407 Sum
http://acm.hdu.edu.cn/showproblem.php?pid=4407 题意:给定初始n个数1..n,两个操作,①1 x y p 询问第x个数到第y个数中与p互质的数的和; ② ...
- HDU 4407 Sum 容斥原理
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Desc ...
- hdu 4407 Sum 容斥+当前离线
乞讨X-Y之间p素数,,典型的纳入和排除问题,列的求和运算总和的数,注意,第一项是最后一个项目数. 如果不改变到第一记录的答案,脱机处理,能保存查询,候,遇到一个操作1,就遍历前面的操作.把改动加上去 ...
- hdu 4407 容斥原理
题意: 1 //一组数据 3 3 //数字为1-3,3次运算 2 2 3 //将2号位变成3 1 1 3 4 //计算1-3号位上与4互质的数的和 1 2 3 6 好题,需要重复练习 #include ...
- HDU - 4407 Sum (容斥)
题意:初始序列[1..N](1<=N<=4e5),支持两种操作:1.求区间[x,y]内与p互素的数之和: 2.将x位置的数变为c. 分析:很容易把人骗到线段树的思维中,而实际上操作2单点的 ...
- [GodLove]Wine93 Tarining Round #6
比赛链接: http://vjudge.net/contest/view.action?cid=47642#overview 题目来源: 2012 ACM/ICPC Asia Regional Jin ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
随机推荐
- SQL Server数据库(SQL Sever语言 CRUD)
使用SQL Sever语言进行数据库的操作 常用关键字identity 自增长primary key 主键unique 唯一键not null 非空references 外键(引用) 在使用查询操作数 ...
- VS复习 -- if···else和if···else嵌套语句
注意:理清逻辑,画出逻辑分支图,理清思路 1.if语句 2.if...else语句 3.if..else if...else static void Main(string[] args) { Con ...
- XHR——XMLHttpRequest对象
创建XMLHttpRequest对象 与之前众多DOM操作一样,创建XHR对象也具有兼容性问题:IE6及之前的版本使用ActiveXObject,IE7之后及其它浏览器使用XMLHttpRequest ...
- div在固定高的文字垂直居中
<div style='display:table; height:100px;'> <div style='display:table-cell; vertical-align: ...
- git 将本地项目添加到远程
git init git add README.md git commit -m "first commit" git remote add origin git@github.c ...
- mapreduce 输入输出类型
默认的mapper是IdentityMapper,默认的reducer是IdentityReducer,它们将输入的键和值原封不动地写到输出中. 默认的partitioner是HashPartitin ...
- Java:一个简单的Java应用程序
/** * 这是文档注释 * @version * @author */ /* 这之间的内容也是注释 */ //这是行注释 public class FirstSample { public st ...
- SQL CAST, CONVERT 比较
本文转自:http://www.cnblogs.com/denylau/archive/2010/12/01/1893371.html if (@StartTime > @EndTime) ...
- Cisco IOS Debug Command Reference I through L
debug iapp through debug ip ftp debug iapp : to begin debugging of IAPP operations(in privileged EXE ...
- Eclipse版本及其代号
1.维基百科介绍 http://zh.wikipedia.org/wiki/Eclipse 2.版本及其代号