CF:358C 暴力DP筛选素数预处理
来源:互联网 发布:直播电影的软件 编辑:程序博客网 时间:2024/06/03 17:33
Recently, the bear started studying data structures and faced the following problem.
You are given a sequence of integers x1, x2, ..., xn of length n and m queries, each of them is characterized by two integers li, ri. Let's introduce f(p) to represent the number of such indexes k, that xk is divisible by p. The answer to the query li, ri is the sum: , where S(li, ri) is a set of prime numbers from segment [li, ri] (both borders are included in the segment).
Help the bear cope with the problem.
The first line contains integer n (1 ≤ n ≤ 106). The second line contains n integers x1, x2, ..., xn (2 ≤ xi ≤ 107). The numbers are not necessarily distinct.
The third line contains integer m (1 ≤ m ≤ 50000). Each of the following m lines contains a pair of space-separated integers, li and ri(2 ≤ li ≤ ri ≤ 2·109) — the numbers that characterize the current query.
Print m integers — the answers to the queries on the order the queries appear in the input.
65 5 7 10 14 1532 113 124 4
970
72 3 5 7 11 4 828 102 123
07
Consider the first sample. Overall, the first sample has 3 queries.
- The first query l = 2, r = 11 comes. You need to count f(2) + f(3) + f(5) + f(7) + f(11) = 2 + 1 + 4 + 2 + 0 = 9.
- The second query comes l = 3, r = 12. You need to count f(3) + f(5) + f(7) + f(11) = 1 + 4 + 2 + 0 = 7.
- The third query comes l = 4, r = 4. As this interval has no prime numbers, then the sum equals 0.
这题太神了!比赛的时候不知道怎么做,唉……没想到可以这样暴力的。太神了……递推的DP,查询时间复杂为O(1),比线段树还快,这个能这样暴力真是服了,见识短浅啊……
dp[i]表示当前2到 i 这中间能被 那n 个数整除的数之和……然后求 l 到 r 的时候就可以直接dp [ r ] - dp [ l-1] 了。
#include <iostream>#include <cstdio>#include <fstream>#include <algorithm>#include <cmath>#include <deque>#include <vector>#include <list>#include <queue>#include <string>#include <cstring>#include <map>#include <stack>#include <set>#define PI acos(-1.0)#define mem(a,b) memset(a,b,sizeof(a))#define sca(a) scanf("%d",&a)#define pri(a) printf("%d\n",a)#define lson i<<1,l,mid#define rson i<<1|1,mid+1,r#define MM 10000005#define MN 3005#define INF 10000007#define eps 1e-7using namespace std;typedef long long ll;int vis[MM],dp[MM],is[MM];void getprime(){ int i,j; for(i=2;i<=MM;i++) if(!is[i]) { if(vis[i]) dp[i]+=vis[i]; for(j=i+i;j<=MM;j+=i) { if(vis[j]) dp[i]+=vis[j]; is[j]=1; } } for(i=2;i<=MM;i++) dp[i]+=dp[i-1];}int main(){ int n,m,i,a,l,r; sca(n); for(i=0;i<n;i++) sca(a),vis[a]++; getprime(); sca(m); while(m--) { scanf("%d%d",&l,&r); l=l>MM?MM:l; r=r>MM?MM:r; pri(dp[r]-dp[l-1]); } return 0;}
- CF:358C 暴力DP筛选素数预处理
- CF -- 835C Star sky 【dp + 预处理】
- CF C. Bear and Prime Numbers 筛选素数并计算
- 素数筛选法(预处理)
- CF:Problem 385C - Bear and Prime Numbers 预处理DP
- cf 435C 暴力
- CF 557C 暴力
- 【HDU4944】预处理(类似素数筛选)
- cf - 670C Cinema(预处理)
- POJ 2034 反素数,素数筛选,DFS暴力搜索
- CF 558C 暴力,bfs
- CF 489C 暴力处理
- C/C++中的素数筛选
- CF - 494B - 字符串预处理 + DP
- CF 379D NewYearLetter [dp+暴力]
- CF 165C dp
- CF - 505C DP
- CF - 255C DP
- 管理oracle 11g RAC 常用命令
- huffman的实现
- 黑马程序员——面试题之交通灯管理系统
- Let us learn C in Code <6> _printf()
- 对象数组操作长方柱类
- CF:358C 暴力DP筛选素数预处理
- wqrehy
- play framework (一)
- fork
- 设计模式介绍之八:职责链模式(Chain of responsibility)
- 强引用、弱引用、软引用、幽灵引用区别
- java反射机制,通过类名获取对象,通过方法名和参数调
- 数组插入
- 难得有情人》走红的关淑怡曝私生子生父是不丹活佛