摘要: /*(x1,y2) ____________ (x2,y2) | | | | | | |____________|(x1,y1) (x2,y1)在上面的矩形中,本题用树状数组来计算的,所以sum(x2,y2)计算的是它的左下方所有的手机用户数,但是它多算了sum(x2,y1)以下的以及sum(x1,y2)以下的,若减掉即ans = sum(x2,y2) - sum(x2,y1) -sum(x1,y2)的话,又减多了sum(x1,y1)部分,那只好加上这一部分了。另外,在update(),sum()时,无非算多了一维,很容易理解的,具体看代码,新学到了 i -... 阅读全文
posted @ 2012-03-22 21:11 yejinru 阅读(227) 评论(0) 推荐(0) 编辑
摘要: /*晕,弄少了九位数的那段据说偶数位的话,除了11是回文素数以外,其他均可被11整除并且是合数,然后就枚举1位3位5位7位9位数的数,然后判断是否为素数即可*/#include <iostream>#include <cmath>using namespace std;long long a,b;bool judge(long long x){ for(int i=2;i<=(int)sqrt(x*1.0);i++) if(x%i==0) return false; return true;}void solve(){ long long ans; if(a< 阅读全文
posted @ 2012-03-22 19:39 yejinru 阅读(349) 评论(0) 推荐(0) 编辑
摘要: /*题目: 是说学生0怀疑有SARS病,跟他接触过的俱乐部的所有人以及他接触过的人再与别人接触, 都有可能有SARS病,要你求出给出的所有俱乐部人的名单,要你求出所有的嫌疑犯。。。分析: 用并查集的方法做,具体实现是先定义n个森林,然后再把同一的人所在的森林合并在一起, 而并查集的改善方法有两种,我的使用的是压缩路径的方法*/#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int X = 30010;int parent[X],a[X],Rank[ 阅读全文
posted @ 2012-03-22 18:13 yejinru 阅读(235) 评论(0) 推荐(0) 编辑
摘要: /*题目: 给出n个商店,每个商店有初始化的商品数量,现在有两种指令: 0 x y 连锁店x的商品数量变化值为y,y > 0商品数量增加, y < 0减少 1 i j 输出编号在[i,j]区间内的连锁店中商品数量为素数的有多少家 当指令为1时,求给出 i到j的商品数量为素数的商店的数目分析: 用树状数组做,只不过在update()处改动一下,并且注意到有可能改动完后和改动前 均为素数的情况,所以用visit[]数组记录此前是否为素数,另外需要注意的是当初始 化时即为奇数的话,当时就要初始化数组c[]以及visit[]数组*/#include <iostream>#inc 阅读全文
posted @ 2012-03-22 15:14 yejinru 阅读(280) 评论(0) 推荐(0) 编辑