这一题的题意是   定义一个数,该数特点是为a的p次方 (a>0,p>1) 再给你n个询问,每个询问给出一个区间,求区间内该数的数目。

由于给出的询问数极大(10e5) 所以,容易想到应该打个表来存储这种数。那么问题来了,如果要打1~10e18内a的2次方数的表(即1,4,9,16......)需要从1for循环到1e9,明显也会超时。思考后可以发现,如果从3次方起开始打表的话,复杂度就是从1e6开始,不会超时。所以这题,我们打出3、4、5....次方的表。并且用二分的方式找出区间内二次方的数目。(通过平方,二分出夹着区间的两个底数,然后求差,就可以得出该区间内的二次方数的数目)。期间还会有重复,比如2^4=4^2,所以我们在统计完表后需要先去重、然后再判断每个数是否是二次方数(比如前面的例子,16可以被当成是2次方数或者4次方数,但是我们应该它看成是2次方数,所以把他从表中删除)

#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
vector<long long>v1,v2;
long long sq(long long a)
{
return a*a;
}
long long efcz(long long l,long long r)
{
long long ans1,ans2,l1,r1,mid;
l1=;r1=1e9+;ans1=-;
while(l1<=r1)
{
mid=(l1+r1)/;
if(sq(mid)>=l) ans1=mid,r1=mid-;
else l1=mid+;
}
l1=;r1=1e9+;ans2=-;
while(l1<=r1)
{
mid=(l1+r1)/;
if(sq(mid)>r) ans2=mid,r1=mid-;
else l1=mid+;
}
return ans2-ans1;
}
bool check(long long a)
{
if(sq(sqrt(a))==a) return true;
if(sq(sqrt(a)+)==a) return true;
if(sq(sqrt(a)-)==a) return true;
return false;
}
int main()
{
int i,j,k,q;
long long r,l,ans,n;
v1.clear();v2.clear();
for(i=;i<=1e6;i++)
{
long long e=i;
for(j=;j<=;j++)
{
if(1e18/e<i) break;
e*=i;
if(j!=) v1.push_back(e);
}
}
sort(v1.begin(),v1.end());
v1.erase(unique(v1.begin(),v1.end()),v1.end());
int size=v1.size();
for(i=;i<size;i++) if(!check(v1[i])) v2.push_back(v1[i]);
cin>>n;
for(i=;i<n;i++)
{
ans=;
cin>>l>>r;
if(l<=) ans++;
ans+=upper_bound(v2.begin(),v2.end(),r)-lower_bound(v2.begin(),v2.end(),l);
//cout<<"qqqqqqqqqqq"<<endl;
ans+=efcz(l,r);
cout<<ans<<endl;
}
}

codeforce 955c --Sad powers 思路+二分查找的更多相关文章

  1. Codeforces 955C Sad powers(数论)

    Codeforces 955C Sad powers 题意 q组询问,每次询问给定L,R,求[L,R]区间内有多少个数可以写成ap的形式,其中a>0,p>1,1 ≤ L ≤ R ≤ 1e1 ...

  2. Codeforces 955C - Sad powers(数论 + 二分)

    链接: http://codeforces.com/problemset/problem/955/C 题意: Q次询问(1≤Q≤1e5),每次询问给出两个整数L, R(1≤L≤R≤1e18),求所有符 ...

  3. Codeforces 955C Sad powers (数论)

    题目链接:Sad powers 题意:给出n个l和r,求出每个给出的[l,r]之间的可以使是另外一个数的k次方的数.(k>=2) 题解:题目给出的数据范围最大是1E18所以如果要直接把所有的从1 ...

  4. [剑指Offer]53-在排序数组中查找数字(二分查找)

    题目一 数字在排序数组中出现的个数 题目描述 统计一个数字在排序数组中出现的次数. 解决思路 写两个二分查找分别找第一个和最后一个该数字,然后可直接出计算有几个该数字.时间复杂度为O(logn). 这 ...

  5. LintCode_14 二分查找

    题目 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1. 样例 在数组 [1 ...

  6. 《JavaScript算法》二分查找的思路与代码实现

    二分查找的思路 首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步. 如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半 ...

  7. 51 nod 1624 取余最长路 思路:前缀和 + STL(set)二分查找

    题目: 写这题花了我一上午时间. 下面是本人(zhangjiuding)的思考过程: 首先想到的是三行,每一行一定要走到. 大概是这样一张图 每一行长度最少为1.即第一行(i -1) >= 1, ...

  8. 从一个NOI题目再学习二分查找。

    二分法的基本思路是对一个有序序列(递增递减都可以)查找时,测试一个中间下标处的值,若值比期待值小,则在更大的一侧进行查找(反之亦然),查找时再次二分.这比顺序访问要少很多访问量,效率很高. 设:low ...

  9. 二分查找-python

    约12年年底的时候,接触了python不到半年的样子,入门是直接实现GUI测试case的.今天面试地平线机器人,发现忘得差不多了- -. 当时的问题是这样的 写一个二分查找是实现,我好像不记得二分查找 ...

随机推荐

  1. js监听手机端点击物理返回键或js监听pc端点击浏览器返回键

    之前在项目中遇到一个问题,就是在微信网页上面本来是有返回按钮的,但是大多数人都为了方便,会使用安卓手机自带的物理返回键,这个返回键按下后,就会按照你浏览器的栈存储的路径来一层一层返回,就不执行你页面上 ...

  2. jsp标签jstl和el表达式

    1.el表达式的使用 1)访问bean的属性 方式一: ${user.name},容器会依次从pageContext,request,session,application中查找(getAttribu ...

  3. Python学习之旅(三十二)

    Python基础知识(31):图形界面(Ⅱ) Python内置了turtle库,可以在计算机上绘图 运动控制: 1.画笔定位到坐标(x,y):turtle.goto(x,y) 2.向正方向运动 dis ...

  4. 根据Excel模板,填写报表,并下载到web浏览器端

    package com.neusoft.nda.basic.recordmanager.viewelec.servlet; import java.io.File; import java.io.Fi ...

  5. vb中的除法

    “\”:在Integer类型中,如果商带小数,则直接舍去小数部分,只保留整数部分.“/”:在Integer类型中,如果商带小数,则把小数部分以0.5为界限,小数部分大于0.5,则返回的整数部分+1:如 ...

  6. 在不同语言中static的用法

    static (计算机高级语言) 编辑 像在VB,C#,C,C++,Java,PHP中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN.ALGOL.COBOL.BA ...

  7. 苹果 ios 微信浏览器界面 ajax 提交带 file 的 form 总是走error方法

    1. 问题 问题出在微信端,而且是苹果机的微信端(苹果你咋这么矫情,安卓正常).:代码还是之前的代码,貌似是苹果升级系统后部分版本出现的 BUG,后来证明确实跟 ios 版本有关,网上也找过类似的解决 ...

  8. Vuex之理解Getters的用法

    一.什么是getters在介绍state中我们了解到,在Store仓库里,state就是用来存放数据,若是对数据进行处理输出,比如数据要过滤,一般我们可以写到computed中.但是如果很多组件都使用 ...

  9. Storm UI说明

    一.Storm ui 首页主要分为4块: Cluster Summary,Topology summary,Supervisor summary,Nimbus Configuration Cluste ...

  10. java框架之SpringBoot(15)-安全及整合SpringSecurity

    SpringSecurity介绍 Spring Security 是针对 Spring 项目的安全框架,也是 Spring Boot 底层安全模块默认的技术选型.它可以实现强大的 Web 安全控制.对 ...