hdu 2642 Stars

简介: 点击打开hdu 2642 思路: 二维树状数组 分析: 裸题 代码:  /************************************************ * By: chenguolin ...

点击打开hdu 2642

思路: 二维树状数组

分析: 裸题


代码:

 

/************************************************
 * By: chenguolin                               * 
 * Date: 2013-08-21                             *
 * Address: http://blog.csdn.net/chenguolinblog *
 ***********************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 1010;

int m;
int num[MAXN][MAXN];
int treeNum[MAXN][MAXN];

int lowbit(int x){
    return x&(-x);
}

int getSum(int x , int y){
    int sum = 0;
    for(int i = x ; i > 0 ; i -= lowbit(i))
        for(int j = y ; j > 0 ; j -= lowbit(j))
            sum += treeNum[i][j];
    return sum;
}

void add(int x , int y , int val){
    for(int i = x ; i < MAXN ; i += lowbit(i))
        for(int j = y ; j < MAXN ; j += lowbit(j))
            treeNum[i][j] += val;
}

void solve(){
    memset(num , 0 , sizeof(num));
    memset(treeNum , 0 , sizeof(treeNum));
    char c;
    int x , y , val;
    int x1 , x2 , y1 , y2;
    int x3 , x4 , y3 , y4;
    while(m--){
         scanf("%c" , &c); 
         if(c == 'B'){
             scanf("%d%d%*c" , &x , &y);
             x++ , y++;
             val = num[x][y] ? 0 : 1;
             if(val)
                 add(x , y , val);
             num[x][y] = 1;
         }
         else if(c == 'D'){
             scanf("%d%d%*c" , &x , &y);
             x++ , y++;
             if(num[x][y])
                add(x , y , -1);
             num[x][y] = 0;
         }
         else{
             scanf("%d%d" , &x1 , &x2);
             scanf("%d%d%*c" , &y1 , &y2);
             x1++ , x2++ , y1++ , y2++;
             x3 = min(x1 , x2) , y3 = min(y1 , y2);
             x4 = max(x1 , x2) , y4 = max(y1 , y2);
             int ans = getSum(x4 , y4);
             ans -= getSum(x3-1 , y4);
             ans -= getSum(x4 , y3-1);
             ans += getSum(x3-1 , y3-1);
             printf("%d\n" , ans);
         }
    }
}

int main(){
    while(scanf("%d%*c" , &m) != EOF)
          solve(); 
    return 0;
}



目录
相关文章
|
机器学习/深度学习
编程之路_R
编程之路_R
|
数据库
【TP5】根据数据库字段注释使用同一模板进行增删查(1)
【TP5】根据数据库字段注释使用同一模板进行增删查
233 0
【TP5】根据数据库字段注释使用同一模板进行增删查(1)
|
弹性计算 网络安全 存储
阿里云弹性公网IP和ECS独立IP区别对比和优势详解
阿里云弹性公网IP是可以独立购买和持有的公网IP地址资源,弹性公网IP和ECS独立公网IP有什么区别?云吞铺子分享: 什么是弹性公网IP? 弹性公网IP(EIP):即Elastic IP Address,简称EIP,EIP是可以独立购买和持有的公网IP地址资源,购买EIP后,可以将EIP绑定到专有网络类型的ECS实例、专有网络类型的私网SLB实例和NAT网关上。
8716 0
|
机器学习/深度学习 人工智能 算法
阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求
本文讲的是阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求【IT168 云计算】计算正推动着人工智能产业更大规模的爆发。
2238 2
|
21小时前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
10天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
4天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
429 191