zoukankan      html  css  js  c++  java
  • hdu 2642 Stars 【二维树状数组】

    题目

    题目大意:Yifenfei是一个浪漫的人,他喜欢数天上的星星。为了使问题变得更容易,我们假设天空是一个二维平面,上面的星星有时会亮,有时会发暗。最开始,没有明亮的星星在天空中,然后将给出一些信息,“B XY”,其中“B”代表明亮,x代表X坐标和Y代表Y坐标是指在(X,Y)的明星是光明的,而在“D XY”'D'的意思是灰暗的星星在(X , Y).当得到“Q X1 X2 Y1 Y2”的查询,你应该告诉Yifenfei在该地区有多少明亮的星星在X1,X2,Y1,Y2决定的矩形里。

    1. B x y:点(x,y)处的星星变亮

    2. D x y:点(x,y)处的星星变暗

    3. Q x1 x2 y1 y2:查询左下角(x1,y1)和右上角(x2,y2)的矩形

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    const int Max = 1010;
    int c[Max][Max];
    int vis[Max][Max];
    
    int lowbit(int x)
    {
        return x&(-x);
    }
    void update(int x,int y,int val)
    {
        int t;
        while(x<=Max){
             t = y;
            while(t<=Max){
             c[x][t]+=val;
             t+=lowbit(t);
            }
            x+=lowbit(x);
        }
    }
    
    int sum(int x,int y)
    {
        int res=0;
        while(x>0){
            int t = y;
            while(t>0){
                res+=c[x][t];
                t-=lowbit(t);
            }
            x-=lowbit(x);
        }
        return res;
    }
    int main()
    {
        int M,x,y;
        string str;
        scanf("%d",&M);
        while(M--)
        {
            cin>>str;
            if(str[0]=='B'){
                scanf("%d%d",&x,&y);
                x++,y++;
                if(!vis[x][y]){
                    vis[x][y] = 1;
                    update(x,y,1);
                }
            }else if(str[0]=='Q'){
                int x1,y1,x2,y2;
                scanf("%d%d%d%d",&x1,&x2,&y1,&y2);
                x1++,x2++,y1++,y2++;
                int X,Y;
                X = max(x1,x2);
                x = min(x1,x2);
                Y = max(y1,y2);
                y = min(y1,y2);
                int ans = sum(X,Y)+sum(x-1,y-1)-sum(X,y-1)-sum(x-1,Y);
                printf("%d
    ",ans);
            }else{//D
                scanf("%d%d",&x,&y);
                x++,y++;
                if(vis[x][y]){
                    vis[x][y]=0;
                    update(x,y,-1);
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    <Android 基础(二十六)> 渐变色圆角Button
    Java 中父类怎么调用子类的方法?
    <Android 基础(二十五)> Frame Animation
    Java基础知识点
    HTTP请求流程(二)----Telnet模拟HTTP请求
    telnet远程登录协议
    HTTP协议详解
    STM32 SPI接口的NSS引脚
    TCP/IP
    以太网帧格式、IP数据报格式、TCP段格式+UDP段格式 详解
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160177.html
Copyright © 2011-2022 走看看