1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 using namespace std;
5 struct jie{
6 double k;
7 int x,v;
8 }dian[1000005],xian[100005];
9 long long c[1005],ans[100005];
10 bool cmp(jie a,jie b)
11 {
12 return a.k<b.k;
13 }
14 long long sum(int x)
15 {
16 long long ret=0;
17 while (x>0) {
18 ret=ret+c[x];
19 x-=(x&-x);
20 }
21 return ret;
22 }
23 void add(int x,int d)
24 {
25 while (x<=1000){
26 c[x]=c[x]+d;
27 x+=(x&-x);
28 }
29 }
30 int main()
31 {
32 int cnt=0,i,j,T,t,n,A,B,x1,y1,x2,p,d;
33 for (i=1;i<=1000;i++)
34 for (j=1;j<=1000;j++)
35 {
36 cnt++;
37 dian[cnt].k=1.0*j/i;
38 dian[cnt].x=i; dian[cnt].v=j;
39 }
40 sort(dian+1,dian+cnt+1,cmp);
41 scanf("%d",&T);
42 for (t=1;t<=T;t++)
43 {
44 memset(c,0,sizeof(c));
45 scanf("%d%d",&A,&B);
46 scanf("%d",&n);
47 for (i=1;i<=n;i++)
48 {
49 scanf("%d%d%d",&x1,&y1,&x2);
50 xian[i].k=1.0*y1/x1;
51 xian[i].x=x2; xian[i].v=i;
52 }
53 sort(xian+1,xian+n+1,cmp);
54 p=1;
55 for (i=1;i<=n;i++)
56 {
57 while (dian[p].k<=xian[i].k&&p<=cnt) {
58 d=(dian[p].x+A)*(dian[p].v+B);
59 add(dian[p].x,d);
60 p++;
61 }
62 ans[xian[i].v]=sum(xian[i].x);
63 }
64 printf("Case #%d:\n",t);
65 for (i=1;i<=n;i++) printf("%I64d\n",ans[i]);
66 }
67 }
http://acm.hdu.edu.cn/showproblem.php?pid=5032