2023牛客寒假算法基础集训营6-B题

2023牛客寒假算法基础集训营6-B题

https://ac.nowcoder.com/acm/contest/46814/B

炸鸡块的代码,特殊++

#include <bits/stdc++.h>
using namespace std;

int n, q;
int a[400010];
int numi[400010], delta[400010];
vector<int> fac[200010];
void add(int x, int pos) {
for (auto num : fac[x]) {
numi[num]++;
}
delta[pos] = numi[x];
}
int main() {
// 假设 rep 是自定义的循环宏,类似 for(int i = a; i <= b; ++i)
rep(i, 1, 200000) {
for (int j = i; j <= 200000; j += i) {
fac[j].push_back(i);
}
}
cin >> n >> q;
rep(i, 1, n) {
scanf("%d", &a[i]);
add(a[i], i);
}
int op, x;
rep(i, 1, q) {
scanf("%d%d", &op, &x);
if (op == 1) {
a[++n] = x; // 这里假设数组足够大
add(a[n], n);
} else {
printf("%d\n", numi[a[x]] - delta[x]);
}
}
return 0;
}