2352解题报告

AccecptTime: 2008-12-16 21:45:55
Language: G++
Memory: 524K
Time: 188MS
Errors: No
Algorithm: 树状数组
  1. #include <stdio.h>
  2. #define add(x) a[x/1600]++;b[x/80]++;c[x/4]++;d[x]++;
  3. //  用a将数组分成1600元素一段 类似的分别用b,c将数组分成更小的块了
  4. int a[21];
  5. int b[401];
  6. int c[8001];
  7. int d[32001];
  8. int count[32000];
  9. int main()
  10. {
  11.     int n, sum;
  12.     int x, y, j;
  13.     scanf("%d",&n);
  14.     forint i = 0; i < n; i++) {
  15.         sum = 0;
  16.         scanf("%d%d",&x,&y);
  17.         //  分别使用较大的段来减少遍历量
  18.         for( j = 0; j < (x/1600); j++)
  19.             sum += a[j];
  20.         for( j = (x/1600)*20 ; j < (x/80); j++)
  21.             sum += b[j];
  22.         for( j = (x/80)*20; j < (x/4); j++)
  23.             sum += c[j];
  24.         for( j = (x/4)*4; j<= x; j++)
  25.             sum += d[j];
  26.         count[sum]++;
  27.         add(x);
  28.     }
  29.     forint i = 0; i < n; i++)
  30.         printf("%d/n",count[i]);
  31. }
这道题的主要考察线段树或树状数组的使用.(后来才发现原来这叫做树状数组的)。
 
ps:这道题是我情绪低落的时候刷的,虽是水题,但它卡我好久了,今天得以ac以解心头之恨~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值