hdu 4407 Sum
http://acm.hdu.edu.cn/showproblem.php?pid=4407
题意:给定初始n个数1..n,两个操作,①1 x y p 询问第x个数到第y个数中与p互质的数的和; ②:2 x y 把第x个数变成y;
思路:
把p分解质因子,然后找出(1,pos)内与p不互质的,然后用的减去就是互质的和,第二个操作用到map映射,记录在那个位置改变之后的数。
#include <cstdio>
#include <cstring>
#include <map>
#include <vector>
#include <algorithm>
#define LL __int64
#define maxn 400001
using namespace std; int t;
int n,m; LL gcd(LL a,LL b)
{
return b==?a:gcd(b,a%b);
} LL deal(LL x,LL y)
{
LL res=x*(x+)/;
vector<int>p;
for(int i=; i*i<=y; i++)
{
if(y%i==)
{
p.push_back(i);
while(y%i==)
{
y/=i;
}
}
}
if(y>) p.push_back(y);
LL ans=;
for(int i=; i<(<<((int)p.size())); i++)
{
LL xx=;
LL c=;
for(int j=; j<(int)p.size(); j++)
{
if(i&(<<j))
{
xx++;
c*=p[j];
}
}
LL t=x/c;
LL sum=((t+)*t/)*c;
if(xx%)
{
ans+=sum;
}
else
ans-=sum;
}
return res-ans;
} int main()
{
map<int,int>q;
scanf("%d",&t);
while(t--)
{
q.clear();
scanf("%d%d",&n,&m);
int x,y,op,pp;
for(int i=; i<=m; i++)
{
scanf("%d",&op);
if(op==)
{
scanf("%d%d%d",&x,&y,&pp);
LL sum=deal((LL)y,(LL)pp)-deal((LL)(x-),(LL)pp);
map<int,int>::iterator it=q.begin();
while(it!=q.end())
{
if(it->first>=x&&it->first<=y)
{
if(gcd(it->first,pp)==)
{
sum-=it->first;
}
if(gcd(it->second,pp)==)
{
sum+=it->second;
}
}
it++;
}
printf("%I64d\n",sum);
}
else
{
scanf("%d%d",&x,&y);
q[x]=y;
}
}
}
return ;
}
hdu 4407 Sum的更多相关文章
- HDU 4407 Sum 容斥原理
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Desc ...
- HDU - 4407 Sum (容斥)
题意:初始序列[1..N](1<=N<=4e5),支持两种操作:1.求区间[x,y]内与p互素的数之和: 2.将x位置的数变为c. 分析:很容易把人骗到线段树的思维中,而实际上操作2单点的 ...
- hdu 4407 Sum 容斥+当前离线
乞讨X-Y之间p素数,,典型的纳入和排除问题,列的求和运算总和的数,注意,第一项是最后一个项目数. 如果不改变到第一记录的答案,脱机处理,能保存查询,候,遇到一个操作1,就遍历前面的操作.把改动加上去 ...
- HDOJ(HDU).1258 Sum It Up (DFS)
HDOJ(HDU).1258 Sum It Up (DFS) [从零开始DFS(6)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双 ...
- HDU 4407
http://acm.hdu.edu.cn/showproblem.php?pid=4407 把修改和询问分成两部分解决 询问求区间内与p不互素的和,和求个数一样,用容斥原理解决,只不过做容斥的时候把 ...
- hdu 1258 Sum It Up(dfs+去重)
题目大意: 给你一个总和(total)和一列(list)整数,共n个整数,要求用这些整数相加,使相加的结果等于total,找出所有不相同的拼凑方法. 例如,total = 4,n = 6,list = ...
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
Sum Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...
- HDU 1231 最大连续子序列 &&HDU 1003Max Sum (区间dp问题)
C - 最大连续子序列 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- HDU 4704 Sum (高精度+快速幂+费马小定理+二项式定理)
Sum Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I64u Submit Status ...
随机推荐
- python字符串连接的三种方法及其效率、适用场景详解
python字符串连接的方法,一般有以下三种:方法1:直接通过加号(+)操作符连接website=& 39;python& 39;+& 39;tab& 39;+& ...
- 再看C++引用类型
之前弃用博客园的原因是其不支持markdown语法.到今天偶然进来试了一下,发现Markdown toggle原来是能支持的(不知道是不是因为它升级了),遂重新启用. 在一年前学C++的时候就对引用, ...
- Android FastJson解析
1.导包 compile 'com.alibaba:fastjson:1.2.21' public static final Object parse(String text); // 把JSON文本 ...
- Android的Touch系统简介(一)
一.Android touch事件的相关概念 用户的Touch事件被包装成MotionEvent 用户当前的touch事件主要类型有: ACTION_DOWN: 表示用户开始触摸. ACTION_MO ...
- SAP OTR 字段维护 更改SAP的字段翻译
维护系统文本字段:SOTR_EDIT TC:SE63 在SAP用户选择屏幕中,用鼠标选定一个栏位后按F1键,能够看到SAP对其详细解释,通常这样的解释文本分为两部分,一部分为标题, ...
- Linux & Mac curl 命令行使用——POST&GET
http提交一个表单,比較经常使用的是POST模式和GET模式 在curl的命令行下,GET模式什么option都不用.仅仅须要把变量写在url里面就能够了 比方: curl http://www.s ...
- Linux cpuinfo 详解
在Linux系统中,如何详细了解CPU的信息呢? 当然是通过cat /proc/cpuinfo来检查了,但是比如几个物理CPU/几核/几线程,这些问题怎么确定呢? 经过查看,我的开发机器是1个物理C ...
- Creating a simple static file server with Rewrite--reference
Today, I’d like to take a quick moment to demonstrate how to make a simple file server using Rewrite ...
- Linux shell入门基础(七)
七.bash脚本中的流程控制 条件判断控制 -[]([]中的表达式是否为真) &&(前边的结果是true的时候执行后边的命令) ||(前边的结果是false的时候执行后边 ...
- python简单小爬虫爬取易车网图片
上代码: import requests,urllib.request from bs4 import BeautifulSoup url = 'http://photo.bitauto.com/' ...