这是一题求完全平方数个数的题目。

关注到这题有多组数据,我们可以想到将所有完全平方数预处理,储存起来,询问时一一查询,此时该算法时间复杂度为,显然该时间复杂度过大,会导致超时。

可以发现,在区间中有且只有个完全平方数,亦可知区间中有且只有个完全平方数,那么我们就可以得到区间中有个完全平方数,此时时间复杂度为,满足我们的要求。当然,由于有可能为,而此时为负值,因此我们要特别判断这种情况,此时的区间内有个完全平方数。

#include <math.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
    int n;
    scanf("%d" , &n);
    while (n--)
    {
        int l , r;
        scanf("%d%d" , &l , &r);
        if (l != 0)
            printf("%d\n" , (int)sqrt(r) - (int)sqrt(l - 1));
        else
            printf("%d\n" , (int)sqrt(r) + 1);
    }
}