uva11610 树状数组+素数打表求因子,好题!
/*
uva11610
树状数组+素数打表+离散化
打出的素数范围在2-1000000之间,不超过六位数,然后按照格式翻转成七位数
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000005
#define ll long long
int flag[maxn],prime[maxn],cnt;
int fac[maxn],a[maxn],tot,p[maxn];
ll bit1[maxn],bit2[maxn];
map<int,int>m;
int solve(int num){//将每个素数翻转后返回,最后一位必定是0,忽略
int len=,ret=,bit[];
while(num){
bit[len++]=num%;
num/=;
}
for(int i=;i<len;i++)
ret=ret*+bit[i];
while(ret<) ret*=;
return ret;
}
void init(){
for(int i=;i<;i++){//线性筛
if(flag[i])continue;
prime[++cnt]=i;
for(int j=;j*i<;j++)
flag[i*j]=;
}
for(int i=;i<=cnt;i++)//将每个素数翻转
a[i]=solve(prime[i]);
sort(a+,a++cnt);
for(int i=;i<=cnt;i++)//离散化
m[a[i]]=i;
for(int i=;i<=cnt;i++){
fac[i]=;//删掉最后一个0带来的两个质因数
int tmp=a[i];
for(int j=;j<=cnt && prime[j]*prime[j]<=tmp;j++)
while(tmp%prime[j]==){
tmp/=prime[j];
fac[i]++;
}
if(tmp>) fac[i]++;
}
}
void add1(int x,int num){
for(int i=x;i<=maxn-;i+=i&-i)
bit1[i]+=num;
}
void add2(int x,int num){
for(int i=x;i<=maxn-;i+=i&-i)
bit2[i]+=num;
}
ll query1(int x){
ll res=;
for(int i=x;i;i-=i&-i)
res+=bit1[i];
return res;
}
ll query2(int x){
ll res=;
for(int i=x;i;i-=i&-i)
res+=bit2[i];
return res;
}
int main(){
init();
for(int i=;i<=cnt;i++){
add1(i,);
add2(i,fac[i]);
}
char op[];int k;
while(scanf("%s%d",op,&k)!=EOF){
if(op[]=='d'){//把整个点从数组中删除
add1(m[k/],-);
add2(m[k/],-fac[m[k/]]);
}
else {
k++;
int l=,r=cnt,ans;
while(l<=r){
int mid=l+r>>;
ll tmp=query1(mid);
if(tmp<=k)
ans=mid,l=mid+;
else
r=mid-;
}
printf("%lld\n",query2(ans));
}
}
return ;
}
uva11610 树状数组+素数打表求因子,好题!的更多相关文章
- HDU 1556 线段树或树状数组,插段求点
1.HDU 1556 Color the ball 区间更新,单点查询 2.题意:n个气球,每次给(a,b)区间的气球涂一次色,问最后每个气球各涂了几次. (1)树状数组 总结:树状数组是一个查 ...
- 二维树状数组+差分【p4514】上帝造题的七分钟
Description "第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n\times m\)矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为\((a,b)\),右 ...
- POJ 2155 Matrix 【二维树状数组】(二维单点查询经典题)
<题目链接> 题目大意: 给出一个初始值全为0的矩阵,对其进行两个操作. 1.给出一个子矩阵的左上角和右上角坐标,这两个坐标所代表的矩阵内0变成1,1变成0. 2.查询某个坐标的点的值. ...
- 树状数组 LA 4329 亚洲赛北京赛区题
复习下树状数组 还是蛮有意思的一道题: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&cat ...
- Kattis - Fenwick Tree(树状数组区间更新单点求值)
Fenwick Tree Input The first line of input contains two integers NN, QQ, where 1≤N≤50000001≤N≤500000 ...
- nyoj123_士兵杀敌(四)_树状数组_插线求点
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战 ...
- HDU - 3584 Cube (三维树状数组 + 区间改动 + 单点求值)
HDU - 3584 Cube Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Subm ...
- [Split The Tree][dfs序+树状数组求区间数的种数]
Split The Tree 时间限制: 1 Sec 内存限制: 128 MB提交: 46 解决: 11[提交] [状态] [讨论版] [命题人:admin] 题目描述 You are given ...
- 树状数组 && 线段树应用 -- 求逆序数
参考:算法学习(二)——树状数组求逆序数 .线段树或树状数组求逆序数(附例题) 应用树状数组 || 线段树求逆序数是一种很巧妙的技巧,这个技巧的关键在于如何把原来单纯的求区间和操作转换为 求小于等于a ...
随机推荐
- 函数和常用模块【day05】:迭代器(六)
本节内容 1.简书 2.可迭代对象 3.迭代器 4.rang方法 5.总结 一.简述 我们经常使用for循环去遍历一些序列数据,但是我们有的时间发现for循环的效率很低,而且很占用了大量的硬件资源,但 ...
- .net视频教程代码之《提交注册内容》
看我的视频之后感觉代码太多不好打或者容易打错的话可以来看我的这里的代码.我的视频地址是 https://www.bilibili.com/video/av12727717/ 类里面的代码: using ...
- centos7下安装nginx的方法
没有用tar包的方法,太麻烦,还需要找,还需要编译,还需要下乱七八糟的依赖模块.麻烦的一逼,看网上说的.就采用了在线安装的方法.很快.注意一下,这种方法安装是安装到系统默认的位置.我也不知道怎么换.留 ...
- bzoj千题计划303:bzoj4827: [Hnoi2017]礼物
https://www.lydsy.com/JudgeOnline/problem.php?id=4827 式子化简一下,发现最后只跟 Σ xi*yi 有关 第二个序列反转,就可以用FFT优化 注意: ...
- Keil4 几例异常解决办法
以下几个问题在Keil5上没有发现,不过因为下载的例子都是Keil4,强迫症让我用起了Keil4 错误一:main.c: Warning: C3910W: Old syntax, please use ...
- 算法排序【时间复杂度O(n^2)】
排序算法的两个原则: 1.输出结果为递增或者递减. 2.输出结果为原输入结果的排列或者重组. 平均时间复杂度为O(n^2)的排序算法有三种: 冒泡排序,插入排序,选择排序. 一.冒泡排序: 即谁冒泡泡 ...
- Tomcat环境变量,端口号,编码格式,项目路径,默认页的配置
Tomcat的配置 1.配置环境变量 新建名为:CATALINA_HOME的系统变量,值为我们安装tomcat的目录 2端口号及编码的配置: 找到tomcat安装目录下的sonf下的server文件, ...
- TwemProxy Redis架构
TwemProxy 1.twemproxy是twitter开发的一个redis代理proxy. 通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免redis单点故障问题. ...
- mysql 原理 ~ 事务隔离机制
简介: 事务隔离知多少内容 一 基础知识 1 事务特性 ACID A 原子性 C 一致性 I 隔离性 D 持久性 2 并行事务出现的问题 1 脏读 读取了其他事务未提交的数据 ...
- 使用layer 弹出对话框 子父页面相互参数传递 父页面获取子页面参数实例
一.先看效果: 1.点击三个点的图标弹出了子页面: 2.子页面调用父页面方法,图一调用父页面方法,图二得到父页面var变量. 3.选择之后,关闭弹框,父页面得到子页面单选框选择的v ...