zoukankan      html  css  js  c++  java
  • Matrix

    poj2155:http://poj.org/problem?id=2155

    题意:给你一个n*n的矩阵,初始的时候里面的元素都是0,然后又两种操作,一种是C x1 y1 x2 y2把(x1,y1)--(x2,y2)这个矩阵里面的元素取反。Q(x1,y1),查询元素(x1,y1)的值。

    题解:二维树状数组的入门题。这里要向下更新,向上统计。更新的时候是^操作,统计的时候也是^操作。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #define  MAXN  1002
     6 using namespace std;
     7 int c[MAXN][MAXN];
     8 int n,m,t,cas;
     9 int lowbit(int x){
    10    return x&(-x);
    11 }
    12 void add(int x,int y){
    13     for(int i=x;i>=1;i-=lowbit(i)){
    14         for(int j=y;j>=1;j-=lowbit(j))
    15             c[i][j]=c[i][j]^1;
    16     }
    17 }
    18 int getsum(int x,int y){
    19     int ans=0;
    20    for(int i=x;i<=n;i+=lowbit(i)){
    21         for(int j=y;j<=m;j+=lowbit(j))
    22             ans=ans^c[i][j];
    23     }
    24    return ans;
    25 }
    26 char temp[10];
    27 int x1,y1,x2,y2;
    28 int main(){
    29     scanf("%d",&cas);
    30     int tt=1;
    31     while(cas--){
    32       memset(c,0,sizeof(c));
    33       scanf("%d%d",&n,&t);
    34       m=n;
    35       if(tt>1)printf("
    ");
    36       tt=2;
    37       for(int i=1;i<=t;i++){
    38         scanf("%s%d%d",temp,&x1,&y1);
    39         if(temp[0]=='C'){
    40             scanf("%d%d",&x2,&y2);
    41             add(x2,y2);
    42             add(x2,y1-1);
    43             add(x1-1,y2);
    44             add(x1-1,y1-1);
    45         }
    46         else{
    47             printf("%d
    ",getsum(x1,y1));
    48         }
    49       }
    50     }
    51 }
    View Code
  • 相关阅读:
    缓存
    mybatis(ibatis)理解
    hibernate理解
    linux vi 命令
    Activity中ConfigChanges属性的用法
    sendStickyBroadcast和sendStickyOrderedBroadcast
    广播 BroadCastReceiver
    Android四大基本组件介绍与生命周期
    ubuntu14.04 开机自动运行应用程序
    Android中BindService方式使用的理解
  • 原文地址:https://www.cnblogs.com/chujian123/p/3861050.html
Copyright © 2011-2022 走看看