poj 2155 Matrix (트 리 배열 의 응용)
n * n (n < = 1000) 의 01 행렬 에 대해 서 는 처음에는 모두 0 이 고 두 가지 조작 이 있 습 니 다.
C x1 y1 x2 y2 는 행렬 의 왼쪽 상단 과 오른쪽 하단 을 대표 하여 이 행렬 의 01 을 교환 하고 원래 0 이 었 던 것 을 1 로 바 꾸 며 원래 1 이 었 던 것 을 0 으로 바 꿉 니 다.
Q x y A [x, y] 지금 몇 이에 요?
01 의 교환 만 있 고 원래 0 이기 때문에 [x, y] 곳 이 몇 번 바 뀌 었 는 지 계산 하면 현재 이 칸 이 몇 칸 인지 확인 할 수 있 습 니 다.중요 한 것 은 [x, y] 칸 을 어떻게 빨리 계산 하 느 냐 하 는 것 이다.조작 방법 은 [x1, y1] [x1, y2 + 1] [x2 + 1, y1] [x2 + 1, y2 + 1] 칸 을 1 로 늘 리 는 것 이다. [x, y] 에 대해 서 는 [1, 1] 에서 [x, y] 의 합 이 바로 [x, y] 에서 몇 번 바 뀌 었 다.
1 차원 으로 바 뀌 면 다 교 문제 랑 비슷 한 것 같 아 요. hdu 4970.
상세 하 게 해석 하 다
#include <stdio.h>
#include <iostream>
#include <map>
#include <set>
#include <bitset>
#include <list>
#include <stack>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#include <algorithm>
#define LL __int64
//#define LL long long
#define eps 1e-9
#define PI acos(-1.0)
using namespace std;
const int INF = 0x3f3f3f3f;
const int mod = 10000007;
int c[1010][1010];
int n,m;
int Lowbit(int x)
{
return x&(-x);
}
void update(int x,int y, int add)
{
while(x <= n)
{
int tmp = y;
while(tmp <= n)
{
c[x][tmp] += add;
tmp += Lowbit(tmp);
}
x += Lowbit(x);
}
}
int sum(int x, int y)
{
int s = 0;
while(x >= 1)
{
int tmp = y;
while(tmp >= 1)
{
s += c[x][tmp];
tmp -= Lowbit(tmp);
}
x -= Lowbit(x);
}
return s;
}
int main()
{
int test;
int x1,y1,x2,y2;
scanf("%d",&test);
while(test--)
{
char ch[2];
memset(c,0,sizeof(c));
scanf("%d %d",&n,&m);
while(m--)
{
scanf("%s",ch);
if(ch[0] == 'C')
{
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
update(x1,y1,1);
update(x1,y2+1,1);
update(x2+1,y1,1);
update(x2+1,y2+1,1);
}
else
{
scanf("%d %d",&x1,&y1);
int s = sum(x1,y1);
if(s&1)
printf("1
");
else
printf("0
");
}
}
printf("
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.