Codeforce385C 树状数组+素因子分解
题目大意:
给多个区间的询问,在询问区间内每一个出现的素数去计算所有数中有多少个数能被这个素数整除
然后将所有素数得到的对应值求和
这里因为初始给定的数不超过10000000,最多670000不到的素数
而后面给定的区间到达1e9是没意义的,只要后面超过10000000都按最后一个数表示即可
然后将素数的标号作为树状数组的点,保存对应的点前缀和
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
#define ll long long
#define N 10001000
#define M 670000
#define pii pair<int,int>
#define lowbit(x) x&(-x)
int prime[M+] , tot ;
bool check[N+]; void get_prim()
{
for(int i= ; i<=N ; i++){
if(!check[i]) prime[tot++] = i;
for(int j= ; j<tot ; j++){
if((ll)i*prime[j]>N) break;
check[i*prime[j]] = true;
if(i%prime[j]==) break;
}
}
} int Hash1(int x)
{
if(x>) return ; //664579是10000000内素数的数目
int l= , r=tot- , ans=;
while(l<=r){
int m = (l+r)>>;
if(prime[m]>=x){ans = m , r=m-;}
else l=m+;
}
return ans+;
} int Hash2(int x)
{
if(x>) return ;
int l= , r=tot- , ans=;
while(l<=r){
int m = (l+r)>>;
if(prime[m]<=x){ans = m , l=m+;}
else r=m-;
}
return ans+;
} ll sum[M]; void add(int x , int v){for(int i=x ; i<=tot ; i+=lowbit(i)) sum[i] += v;} ll query(int x)
{
ll ret = ;
for(int i=x ; i> ; i-=lowbit(i)) ret+=sum[i];
return ret;
} void fenjie(int x)
{
int mx = (int)sqrt(x+0.5);
for(int i= ; i<tot ; i++){
if(prime[i]*prime[i]>x) break;
if(x%prime[i]==){
// cout<<"in: "<<i<<" "<<prime[i]<<endl;
add(i+ , );
while(x%prime[i]==) x/=prime[i];
}
}
if(x>){
int pos = lower_bound(prime , prime+tot , x)-prime;
add(pos+ , );
}
} int main() {
// freopen("a.in" , "r" , stdin);
// freopen("out.txt" , "w" , stdout);
get_prim();
int n , m , s , t;
while(~scanf("%d" , &n))
{
for(int i= ; i<n ; i++){
int x ;
scanf("%d" , &x);
fenjie(x);
}
scanf("%d" , &m);
while(m--){
scanf("%d%d" , &s , &t);
int p1 = Hash1(s) , p2 = Hash2(t);
// cout<<p1<<" "<<p2<<endl;
printf("%I64d\n" , query(p2)-query(p1-));
}
}
}
Codeforce385C 树状数组+素因子分解的更多相关文章
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- bzoj1878--离线+树状数组
这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...
- codeforces 597C C. Subsequences(dp+树状数组)
题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
- 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序
3881: [Coci2015]Divljak Time Limit: 20 Sec Memory Limit: 768 MBSubmit: 508 Solved: 158[Submit][Sta ...
- 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...
随机推荐
- 认识Service
Service相对于Activity可在后台运行,五显示界面,在activity退出的情况下仍能运行. 一.新建一个空的工程,命名为learnService 二.新建一个service,并添加如下所示 ...
- java技术知识点
1 自我介绍 2 做过的项目 (Java 基础) 3 Java的四个基本特性(抽象.封装.继承,多态),对多态的理解(多态的实现方式)以及在项目中那些地方用到多态 Java的四个基本特性 ◦ ...
- Freemarker 浅析 (zhuan)
http://blog.csdn.net/marksinoberg/article/details/52006311 ***************************************** ...
- C语言 常用单词
main 主要的 printf(print format)格式输出 include , return ,if ,else ,switch ,case 机箱:案 ...
- michael的沟通秘籍
1 多准备几个邮件模板2 lower expectation over delivery less promise extra give3 involve resource earliar 尽早接手公 ...
- [转]Android各大网络请求库的比较及实战
自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...
- 实战微信JS SDK开发:贺卡制作与播放(2)
最近同事用CanTK开发了一个基于微信的贺卡制作APP,我虽然没有参与开发,但是提供CanTK和GameBuilder的技术支持,觉得有些东西比较有意思,写几篇博客和大家分享吧.这个贺卡APP完全开源 ...
- bzoj题解汇总(1017-1020)
bzoj1017: 树形dp. 设\(f[i][j][k]\)表示当前在点\(i\),有\(j\)个用于上层合成,花费金币为\(k\)的最大攻击力. bzoj1018: 一题多解. http://ww ...
- 日期操作类--Date类
Date-API ava.util包提供了Date类来封装当前的日期和时间.Date类提供两个构造函数来实例化Date对象.第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函 ...
- WCF技术剖析之二:再谈IIS与ASP.NET管道
原文地址:http://www.cnblogs.com/artech/archive/2009/06/20/1507165.html 在2007年9月份,我曾经写了三篇详细介绍IIS架构和ASP.NE ...