题目链接:点击打开链接
论科学暴力的姿势重要性。。
#include <cstdio>
#include <iostream>
#include <string.h>
#include <math.h>
#include <map>
#include <algorithm>
#include <set>
#include <queue>
using namespace std;
#define ll int
#define N 100010
#define M 100010
vector<int>G[N], go[N];
int n, a[N], b[N], siz[N];
int main(){
int i, j, u, v, k;
for(i = 1; i <= 100000; i++) {
G[i].clear();
j = sqrt((double)i);
for(u = 1; u <= j; u++) if(i%u==0){
G[i].push_back(u);
if(u != (i/u))G[i].push_back(i/u);
}
}
scanf("%d",&n);
for(i = 1; i <= n; i++)
{
scanf("%d %d", &a[i], &b[i]);
for(j = 0; j < G[a[i]].size(); j++)
{
go[G[a[i]][j]].push_back(i);
}
}
for(i = 1; i <= n; i++)
{
if(b[i] == 0) { printf("%d\n", G[a[i]].size());continue;}
int ans = G[a[i]].size();
for(j = 0; j < G[a[i]].size(); j++) {
int l = i-b[i], r = i-1;
l = lower_bound(go[G[a[i]][j]].begin(), go[G[a[i]][j]].end(), l) - go[G[a[i]][j]].begin();
r = upper_bound(go[G[a[i]][j]].begin(), go[G[a[i]][j]].end(), r) - go[G[a[i]][j]].begin() -1;
if(r - l +1 >0)ans--;
}
printf("%d\n", ans);
}
return 0;
}