NYOJ 123 士兵杀敌(四)

http://acm.nyist.net/JudgeOnline/problem.php?pid=123

这题本来交上去就超时了, 然后自己就囧了.... 不知道该用什么更高级的结构了...

然后去百度的题解....

看到的是和我一样的思路, 但怎么就过了呢.. 仔细看了下, 别人的更新都是从当前点更新到0位置.

然而我是从当前点, 更新到数组的结尾, 结果就不行了.

然后自己改了下代码就过了......感觉是数据出的问题,偏向了某一边把....

用线段树是不是会更好呢?

View Code
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 using namespace std;
 5 const int maxn = 1000005;
 6 int ans[maxn], n;
 7 int lowbit(int x)
 8 {
 9     return x & (-x);
10 }
11 
12 int getSum(int x)
13 {
14     int i, sum=0;
15     for(i = x; i<= n; i+=lowbit(i))
16     sum += ans[i];
17     return sum;
18 }
19 
20 int mod(int x, int num)
21 {
22     int i;
23     for(i = x; i > 0; i-=lowbit(i))
24     ans[i] += num;
25 }
26 
27 int main()
28 {
29     int m, a, b, c;
30     memset(ans,0,sizeof(ans));
31     scanf("%d%d",&n,&m);
32     char s[20];
33     while(m--)
34     {
35         scanf("%s",s);
36         if(strcmp(s,"ADD")==0)
37         {
38             scanf("%d%d%d",&a,&b,&c);
39             mod(a-1,-c);
40             mod(b,c);
41         }
42         else
43         {
44             scanf("%d",&a);
45             printf("%d\n",getSum(a));
46         }
47     }
48     return 0;
49 }
posted @ 2012-09-04 22:24  YORU  阅读(248)  评论(0编辑  收藏  举报