[2 차원 트 리 배열] 매트릭스 조작 (matrix) - 용 척 원리

4468 단어
먼저 강력 한 앤 리 의 트 리 배열 에 관 한 상세 한 블 로그'고급' 데이터 구조 - 트 리 배열!각종 트 리 배열 작업 (단점 구간 수정, 단점 구간 조회, 접두사 와 기록, 차분 방법) 을 상세 하 게 소개 했다.이런 조작 라인 트 리 는 모두 실현 할 수 있다 고 하지만 나무 모양 의 배열 은 쓰기 도 쉽 고 빠르다.
제목
    N * N 의 행렬 A 를 지정 합 니 다. 그 중에서 모든 요 소 는 0 이 아니면 1 입 니 다.A [i, j] 는 i 행 j 열 에 있 는 수 를 나타 낸다.처음에 A [i, j] = 0 (1 ≤ i, j ≤ N).    우 리 는 다음 과 같은 방식 으로 행렬 을 바 꿀 수 있다.왼쪽 상단 (x1, y1), 오른쪽 하단 (x2, y2) 의 사각형 을 지정 합 니 다. 우 리 는 'not' 동작 (현재 이 요소 가 0 이 라면 1 이 되 고 그렇지 않 으 면 0 이 됩 니 다) 을 사용 하여 이 사각형 안의 모든 요소 의 값 을 바 꿉 니 다.행렬 의 정 보 를 유지 하기 위해 서 는 프로그램 을 써 서 이 작업 을 받 고 실행 해 야 합 니 다.    C x1 y1 x2 y2 (1 ≤ x1 ≤ x2 ≤ N, 1 ≤ y1 ≤ y2 ≤ N) 는 왼쪽 상단 을 (x1, y1), 오른쪽 하단 을 (x2, y2) 로 바 꾸 는 사각형 구역 의 값 을 나타 낸다.    Q x y (1 ≤ x, y ≤ n) 는 A [x, y] 의 값 을 묻는다.    총 T 조 조작.
데이터 범위
2 ≤ N ≤ 1000,1 ≤ T ≤ 50000
해제
    나 는 매일 템 플 릿 을 만 드 는 몫 만 있 고 템 플 릿 을 만 들 때 문 제 를 풀 어야 한다.    벌 거 벗 은 두 나무 모양 의 배열 을 배 우 러 갔다.    그리고 구간 을 수정 할 때 간단 한 용 척 원 리 를 사용 했다.수정 할 때 tag 를 추가 하면 짝수 수정 은 수정 되 지 않 은 것 과 같 습 니 다.
코드

#include
#include
#include
using namespace std;

const int MAX = 1123;
int data[MAX][MAX], n;

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

void Add(int x, int y, int w) {
    for (int i = x; i <= n; i += lowbit(i)) {
        for (int j = y; j <= n; j += lowbit(j)) {
            data[i][j] += w;
        }
    }
}

int Sum(int x, int y) {
    int ans = 0;
    for (int i = x; i > 0; i -= lowbit(i)) {
        for (int j = y; j > 0; j -= lowbit(j)) {
            ans += data[i][j];
        }
    }
    return ans;
}

int main() {
    char str;
    int k;
    scanf("%d%d",&n,&k);
    memset(data,0,sizeof(data));
    while (k--){
            cin>>str;
            if (str=='C'){
                int x1, x2, y1, y2;
                scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                Add(x1,y1,1);
                Add(x2+1,y1,1);
                Add(x1,y2+1,1);
                Add(x2+1,y2+1,1);
            }
            else {
                int x, y;
                scanf("%d%d",&x,&y);
                printf("%d
"
,Sum(x,y)%2); } } return 0; }

좋은 웹페이지 즐겨찾기