20140711 set 数据结构

很水的一道题。。

用数组 num[i] 记录约数 i 出现的次数

对于添加数的操作 用 √n 枚举 n 的所有约数

注意 n 为完全平方数时num[√n]注意不要多加了一

对于查询操作 num[x] 即为 x倍数的个数

 1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4 #define N 40040
 5 
 6 int num[N];
 7 int n;
 8 
 9 int main() {
10     scanf("%d",&n);
11     memset(num,0,sizeof(num));
12     int ans=0;
13     for (int t=1;t<=n;t++) {
14         int k,x;
15         scanf("%d%d",&k,&x);
16         if (k==1) {
17             for (int i=1;i*i<=x;i++) {
18                 if (x%i==0) {
19                     num[i]++;
20                     num[x/i]++;
21                 }
22                 if (x==i*i) num[i]--;
23             }
24         }
25         else {
26             ans=ans xor num[x];
27         }
28     }
29     printf("%d",ans);
30 }
View Code

 

posted @ 2014-07-11 19:20  __fjm  阅读(143)  评论(0编辑  收藏  举报