POJ 1195 Mobile phones

http://poj.org/problem?id=1195

早上起来A题,结果隔壁寝室的不知道在争论什么,声音真是大。。。。

让人都静不下心来。。

View Code
 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 const int maxn = 1050;
 5 int ans[maxn][maxn];
 6 
 7 int lowbit(int x)
 8 {
 9     return x & (-x);
10 }
11 
12 void mod(int temp[], int x, int c)
13 {
14     int i;
15     for(i=x;i<maxn;i+=lowbit(i))
16         temp[i]+=c;
17 }
18 
19 int getSum(int temp[],int x)
20 {
21     int i,sum=0;
22     for(i=x;i>0;i-=lowbit(i))
23         sum+=temp[i];
24     return sum;
25 }
26 int main()
27 {
28     int n,m,d,i,j;
29     scanf("%d%d",&n,&m);
30     for(i=0;i<maxn;i++)
31     for(j=0;j<maxn;j++)
32     ans[i][j]=n;
33     while(~scanf("%d",&d),d!=3)
34     {
35         int a,b,x,y;
36         if(d%2)
37         {
38             scanf("%d%d%d",&x,&y,&a);
39             mod(ans[x],y+1,a);
40         }
41         else
42         {
43             int sum=0;
44             scanf("%d%d%d%d",&a,&b,&x,&y);
45             for(i=a;i<=x;i++){
46                 sum+=getSum(ans[i],y+1)-getSum(ans[i],b);
47             }
48             printf("%d\n",sum);
49         }
50     }
51     return 0;
52 }
53 
54  

原来真是够暴力。。o(╯□╰)o

这个的话就可以了。

View Code
 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 const int maxn = 1050;
 5 int ans[maxn][maxn],m;
 6 
 7 int lowbit(int x)
 8 {
 9     return x & (-x);
10 }
11 
12 void mod(int x, int y, int a)
13 {
14     int i,j;
15     for(i=x;i<=m;i+=lowbit(i))
16     {
17         for(j=y;j<=m;j+=lowbit(j))
18             ans[i][j]+=a;
19     }
20 }
21 
22 int getSum(int x,int y)
23 {
24     int i,j,sum=0;
25     for(i=x;i>0;i-=lowbit(i))
26     {
27         for(j=y;j>0;j-=lowbit(j))
28             sum+=ans[i][j];
29     }
30     return sum;
31 }
32 int main()
33 {
34     int n,d,i,j;
35     scanf("%d%d",&n,&m);
36     for(i=0;i<maxn;i++)
37     for(j=0;j<maxn;j++)
38     ans[i][j]=0;
39     while(~scanf("%d",&d),d!=3)
40     {
41         int a,b,x,y;
42         if(d%2)
43         {
44             scanf("%d%d%d",&x,&y,&a);
45             x++;
46             y++;
47             mod(x,y,a);
48         }
49         else
50         {
51             int sum=0;
52             scanf("%d%d%d%d",&a,&b,&x,&y);
53             a++;
54             b++;
55             x++;
56             y++;
57             sum=getSum(x,y)-getSum(x,b-1)-getSum(a-1,y)+getSum(a-1,b-1);
58             printf("%d\n",sum);
59         }
60     }
61     return 0;
62 }
63 
64  
原文地址:https://www.cnblogs.com/yoru/p/2696331.html