zoukankan      html  css  js  c++  java
  • HDU 3584 Cube

    Cube

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 1279    Accepted Submission(s): 659

    Problem Description
    Given an N*N*N cube A, whose elements are either 0 or 1. A[i, j, k] means the number in the i-th row , j-th column and k-th layer. Initially we have A[i, j, k] = 0 (1 <= i, j, k <= N). We define two operations, 1: “Not” operation that we change the A[i, j, k]=!A[i, j, k]. that means we change A[i, j, k] from 0->1,or 1->0. (x1<=i<=x2,y1<=j<=y2,z1<=k<=z2). 0: “Query” operation we want to get the value of A[i, j, k].
     
    Input
    Multi-cases. First line contains N and M, M lines follow indicating the operation below. Each operation contains an X, the type of operation. 1: “Not” operation and 0: “Query” operation. If X is 1, following x1, y1, z1, x2, y2, z2. If X is 0, following x, y, z.
     
    Output
    For each query output A[x, y, z] in one line. (1<=n<=100 sum of m <=10000)
     
    Sample Input
    2 5
    1 1 1 1 1 1 1
    0 1 1 1
    1 1 1 1 2 2 2
    0 1 1 1
    0 2 2 2
     
    Sample Output
    1
    0
    1
     
    Author
    alpc32
     
    Source
     
    Recommend
    zhouzeyong   |   We have carefully selected several similar problems for you:  3450 1541 1394 1892 2492 
     
    思路:三维树状数组,向后更新,向前求和
     
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    int map[110][110][110];
    int n,m;
    int sum;
    int operation;
    int x_1,y_1,z_1,x_2,y_2,z_2;
    int posix,posiy,posiz;
    int lowbit(int x)
    {
        return x & (- x);
    }
    void update(int i, int j, int k, int x)
    {
        int tj, tk;
        while(i <= n)
        {
            tj = j;
            while(tj <= n)
            {
                tk = k;
                while(tk <= n)
                {
                    map[i][tj][tk] += x;
                    tk += lowbit(tk);
                }
                tj += lowbit(tj);
            }
            i += lowbit(i);
        }
    }
    int Sum(int i,int j,int k){
        int ans = 0;
        while(i > 0)
        {
            int tempj = j;
            while(tempj > 0)
            {
                int tempk = k;
                while(tempk > 0)
                {
                    ans += map[i][tempj][tempk];
                    tempk -= lowbit(tempk);
                }
                tempj -= lowbit(tempj);
            }
            i -= lowbit(i);
        }
        return ans;
    }
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            memset(map,0,sizeof(map));
            while(m --)
            {
                scanf("%d",&operation);
                if(operation == 1)
                {
                    scanf("%d%d%d%d%d%d",&x_1,&y_1,&z_1,&x_2,&y_2,&z_2);
                    update(x_2 + 1,y_2 + 1,z_2 + 1,1);
                    update(x_2 + 1,y_2 + 1,z_1,1);
                    update(x_2 + 1,y_1,z_2 + 1,1);
                    update(x_1,y_2 + 1,z_2 + 1,1);
                    update(x_2 + 1,y_1,z_1,1);
                    update(x_1,y_2 + 1,z_1,1);
                    update(x_1,y_1,z_2 + 1,1);
                    update(x_1,y_1,z_1,1);
                }
                else
                {
                    scanf("%d%d%d",&posix,&posiy,&posiz);
                    sum = Sum(posix,posiy,posiz);
                    printf("%d
    ",sum & 1);
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    微信——获取用户基本信息及openid 、access_token、code
    Java中的标记接口(zz)
    深入理解Java的注解(Annotation):注解处理器(3)
    深入理解Java的注解(Annotation):自定义注解入门(2)
    深入理解Java的注解(Annotation):基本概念(1)
    TCP 粘包及其解决方案(zz)
    TCP,UDP,IP包头格式及说明(zz)
    python 如何将JSON数据原封不动的转为字符串(顺序不能变动)?
    mysql:functional dependency
    什么是“几何级数”?什么是“算数级数”?有啥区别?
  • 原文地址:https://www.cnblogs.com/GODLIKEING/p/3393944.html
Copyright © 2011-2022 走看看