【csust】最小素因子问题(树状数组)
题干:
http://csustacm.com:4803/problem/1083
Description
寒冰射手艾希新学会了一个技能,艾希通过这个技能成为了一名声名远扬的神箭手,从此再也无人敢侵犯弗雷尔卓德!
这个技能的描述如下(假设英雄联盟内的每个人都有一个编号):
假设艾希有x-1(x>=2)x−1(x>=2)个敌人,每个敌人的编号分别为1\;\;1~\;\;x-1x−1,那么艾希的编号就是xx。艾希每次使用这个技能,那么对于某个敌人,如果这个敌人的编号的最小素因子小于等于艾希的编号的最小素因子,那么艾希能对他造成致命一击。
现在假设已知有tt场战争,每场战争有x-1x−1个敌人,艾希想知道她每场战争使用这个技能能对多少个敌人造成致命一击,由于这个数目太大,她无法计算所以希望你编写一个程序来帮她计算这个结果。
一个数xx的最小素因子:能够整除xx的最小素数。比如2和4的最小素因子是2,3的最小素因子是3。我们知道1不是素数,但是为了题目的完整性,在这里我们定义1的最小素因子为1。
Input
一个正整数t(t<=1000000)t(t<=1000000),表示有t组数据。
每组数据输入一个整数x(2<=x<=1000000)x(2<=x<=1000000),表示艾希的编号为xx,且敌人数量为x-1x−1。
Output
对于每组数据输出一个整数ans,表示艾希在这场战争中使用该技能能对ans个敌人造成致命一击。
Sample Input 1
2 2 6
Sample Output 1
1 3
Hint
对于6这个数据,我们知道1~6的每个数的最小素因子依次为1、2、3、2、5、2,因此编号为1、2、4的敌人将会受到致命一击。
解题报告:
注意到需要用到单点更新和区间查询,树状数组离线处理答案就可以了。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 1000000 + 5;
int d[MAX];//处理出每个数字的最小素因子
int c[MAX];
int ans[MAX];
int lowbit(int x) {return x & -x;}
void update(int x,int val) {while(x < MAX) {c[x] += val;x += lowbit(x);}
}
int query(int x) {int res = 0;while(x > 0) {res += c[x];x -= lowbit(x);}return res;
}
void db() {d[1]=1;for(int i = 2; i<MAX; i++) {if(d[i]) continue; d[i] = i;for(int j = i; j<MAX; j+=i) {if(!d[j]) d[j] = i;}}}
int main()
{db();for(int i = 1; i<MAX; i++) {ans[i] = query(d[i]);update(d[i],1);}int t,x;cin>>t;while(t--) {scanf("%d",&x);printf("%d\n",ans[x]);}return 0 ;
}
【csust】最小素因子问题(树状数组)相关推荐
- 二维树状数组 ----2021广东省赛 ----- K - Kera‘s line segment[区间转二维平面+树状数组维护前缀最小最大值]
题目链接 题目大意: 就是一个一维的数轴上面有一堆线段用一个三元组(l,r,val)(l,r,val)(l,r,val)表示. 现在我们有两个操作: 就是往数轴上面添加线段 询问[L,R][L,R][ ...
- 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅
这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...
- Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]
1.C. Kuroni and Impossible Calculation **知识点:同余定理 ** #include <iostream> #include <cstdio&g ...
- 【数据结构】树状数组 例题剖析
目录 一.模板题 二.树状数组求逆序对 一.离散化 二.逆序对 三.待解决 P1428 小鱼比可爱 算法详解 一.模板题 模板题 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 ...
- 【BZOJ】3173: [Tjoi2013]最长上升子序列(树状数组)
[题意]给定ai,将1~n从小到大插入到第ai个数字之后,求每次插入后的LIS长度. [算法]树状数组||平衡树 [题解] 这是树状数组的一个用法:O(n log n)寻找前缀和为k的最小位置.(当数 ...
- 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)
链接:https://ac.nowcoder.com/acm/contest/308/D 来源:牛客网 tokitsukaze and Inverse Number 时间限制:C/C++ 1秒,其他语 ...
- HDU4000Fruit Ninja【树状数组+组合数】
大意: 告诉你一个有n个数的序列 (1 -- n) 问其中有多少组 (a[i], a[j], a[k]) 满足i < j < k 并且 a[i] < a[k] < a[j] 分 ...
- 【Luogu】P3369 【模板】普通平衡树(树状数组)
P3369 [模板]普通平衡树(树状数组) 一.树状数组 树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构. ...
- hdu 1394(树状数组求逆序数)
解题思路:这道题是求循环数组中逆序数最小值,求逆序数这里肯定是用树状数组.只是这里有一点点变化,由于题目中n位数是0-n-1的一个排列,所以num[i]可表示为比num[i]小的数的个数.把第一位的数 ...
最新文章
- python爬虫抖某音爬取视频 Airtest+fiddler
- 理解SQLNET.AUTHENTICATION_SERVICES参数
- 每天一道LeetCode-----生命游戏
- PostgreSQL函数如何返回数据集
- Java SpringMVC
- 50道编程小题目之【兔子数量】
- entity framework 删除数据库出现错误的解决方法--最土但是很有效的方法
- 【linux】Can't connect to local MySQL server through socket和Plugin 'auth_socket' is not loaded报错...
- 数据分析师还是算法工程师|用数据多角度解读如何选择
- java 调用三角函数_Java中的三角函数方法
- MSDN我告诉你 一个没有人注意的工具站
- 洛谷 P3324 [SDOI2015]星际战争 二分答案+网络流
- 一个非常非常非常简单的SpringBoot小项目by hazy
- 登出系统gif图标_来了!深度操作系统 20正式版——崭新视界,创无止境
- android 发音乐通知到通知栏
- java.lang.IllegalArgumentException(求解决)
- 功能点算法及在软件测试中的应用
- 全国计算机等级考试准考证编号规则
- mysql compact_MySQL基本操作
- 通向架构师的道路(第二十六天)漫谈架构与设计文档的写作技巧
热门文章
- 计算机论文搜索技巧【一】
- pat-1136. A Delayed Palindrome (20) 模拟
- python 元组遍历_Python中的for循环:元组、列表、字典的遍历和相互转化
- 东风小康为什么是dfsk_助力地摊经济瑞驰纯电动物流车和东风小康微型货车厚积薄发...
- rnn中文语音识别java_语音识别算法阅读之RNN-T-2018
- c++源码矢量图形编辑器_下一代代码编辑器的设想
- FFmpeg - C++中使用ffmpeg库
- 【Modern OpenGL】纹理 Textures
- python读取文件路径报invalid_关于Python读取文件的路径中斜杠问题
- MySQL——数据库和表的增删改查