HDU-물만두 기정 2차원 트리 배열
8252 단어 트리 배열
코드는 다음과 같습니다.
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
char op[5];
char G[1050][1050];
int cc[1050][1050];
// ,
void init()
{
int k = 0; // 1, 0
for (int i = 1; i <= 1024; ++i) {
for (int j = 1; j <= 1025; ++j) {
// , k
G[i][j] = (k ^= 1);
}
}
}
int lowbit(int x)
{
return x & -x;
}
void modify(int x, int y, int val)
{
for (int i = x; i <= 1024; i += lowbit(i)) {
for (int j = y; j <= 1024; j += lowbit(j)) {
cc[i][j] += val;
}
}
}
int sum(int x, int y)
{
int tot = 0;
for (int i = x; i > 0; i -= lowbit(i)) {
for (int j = y; j > 0; j -= lowbit(j)) {
tot += cc[i][j];
}
}
return tot;
}
int main()
{
int T, a, b, c, d, k;
int A, B, C, S;
while (scanf("%d", &T) == 1) {
init();
memset(cc, 0, sizeof (cc));
while (T--) {
scanf("%s", op);
if (op[0] == 'R') {
scanf("%d %d %d %d", &a, &b, &c, &d);
A = sum(c, d) - sum(c, b-1) - sum(a-1, d) + sum(a-1, b-1);
if ((a + b) & 1) { //
S = (c-a+1)*(d-b+1) / 2;
}
else {
S = ((c-a+1)*(d-b+1) + 1)/ 2;
}
B = S + A;
C = (c-a+1)*(d-b+1) - B;
printf("%d %d
", B, C);
}
else { // 'A' ,‘B’
scanf("%d %d", &a, &b);
k = op[0] == 'A'; // 1 ,0
if (k != G[a][b]) {
G[a][b] = k;
if (k) {
modify(a, b, 1);
}
else {
modify(a, b, -1);
}
}
}
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu2227---Find the nondecreasing subsequences (dp+ 트리 배열)Problem Description How many nondecreasing subsequences can you find in the sequence S = {s1, s2, s3, …., sn} ? For exam...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.