zoukankan      html  css  js  c++  java
  • 树状数组(二维):COGS 1532 [IOI2001]移动电话

    1532. [IOI2001]移动电话

    ★☆   输入文件:mobilephones.in   输出文件:mobilephones.out   简单对比
    时间限制:5 s   内存限制:256 MB

    【题目描述】

    假设Tampere地区的4G移动通信基站以如下方式运行。整个地区被划分成若干正方形格子。这些格子构成一个S*S的矩阵,它们的行,列编号都是从0到 S-1.每一个格子中都有一个基站。每个格子中激活的手机数量可能改变,因为一部手机可能从一个格子移动到另一个格子,打开或者关闭。有时,某一座基站会 向总站报告自己的行列坐标,以及该格中激活手机数目的变化。

    【输入格式】

    输入指令编码如下。

    每个指令占一行,包含一个指令码和一些参数,见下表。

    指令码 参数 意义
    0 S 初始化一个S*S的全零矩阵。这个指令只会出现一次,即第一条指令。
    1 X Y A 将格子(X,Y)中激活的手机数量增加A。A有可能是正数或负数。
    2 L B R T 询问当前所有坐标(X,Y)满足:L<=X<=R,B<=Y<=T的格子中激活的手机数量之和。
    3
    结束程序。这个指令只会出现一次,即最后一条指令。


    【输出格式】

    你的程序不应该对指令2外的所有指令进行回答。对于每个指令2,你的程序需要输出一行一个正整数,即该指令的答案。

    【样例输入】


    0 4

    1 1 2 3

    2 0 0 2 2

    1 1 1 2

    1 1 2 -1

    2 1 1 2 3

    3


    【样例


    3

    4


    【提示】

    矩阵大小:1<=S<=1024

    任意时刻,每个格子中的激活手机数量V:0<=V<=32767

    格子中激活手机数量的变化值:-32768<=A<=32767

    输入的指令数目:3<=U<=60002

    整个矩阵中的最大手机数量:M=2^30

    【来源】

    IOI 2001

      模板题啊,水过了~~~

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 const int maxn=1050;
     6 int bit[maxn][maxn],op,s;
     7 void add(int x,int y,int d){
     8     for(int i=x;i<=s;i+=i&(-i))
     9         for(int j=y;j<=s;j+=j&(-j))
    10             bit[i][j]+=d;
    11 }
    12 int Query(int x,int y){
    13     int ret=0;
    14     for(int i=x;i;i-=i&(-i))
    15         for(int j=y;j;j-=j&(-j))
    16             ret+=bit[i][j];
    17     return ret;        
    18 }
    19 
    20 int main(){
    21     freopen("mobilephones.in","r",stdin);
    22     freopen("mobilephones.out","w",stdout);
    23     int a,b,x,y;
    24     while(true){
    25         scanf("%d",&op);
    26         if(op==0){
    27             scanf("%d",&s);
    28         }
    29         else if(op==1){
    30             scanf("%d%d%d",&x,&y,&a);
    31             add(x+1,y+1,a);
    32         }
    33         else if(op==2){
    34             scanf("%d%d%d%d",&a,&b,&x,&y);a++;b++;x++;y++;
    35             printf("%d
    ",Query(x,y)-Query(x,b-1)-Query(a-1,y)+Query(a-1,b-1));
    36         }
    37         else break;
    38     }
    39     return 0;
    40 }
    尽最大的努力,做最好的自己!
  • 相关阅读:
    PAT A1094 The Largest Generation (25 分)——树的bfs遍历
    PAT A1055 The World's Richest (25 分)——排序
    PAT A1052 Linked List Sorting (25 分)——链表,排序
    PAT A1076 Forwards on Weibo (30 分)——图的bfs
    辅导员
    辅导员面试
    C程序设计
    Excel VBA 基本概念
    Excel函数
    导入excel表的数据到数据库ssh
  • 原文地址:https://www.cnblogs.com/TenderRun/p/5308375.html
Copyright © 2011-2022 走看看