[2 차원 트 리 배열] 매트릭스 조작 (matrix) - 용 척 원리
제목
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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.