SPOJ GSS 4 낙 곡 P4514 하나님 이 문 제 를 푸 시 는 7 분 & & [나무 모양 배열 진급]
27492 단어 차이 점데이터 구조 - 트 리 배열
이 문 제 를 말 하기 전에 먼저 진급 내용 을 좀 말 해라.
1 차원 트 리 배열 의 구간 수정 + 구간 구 화
나무 모양 의 배열 입문 지식 을 모 르 는 - > 나 가서 좌회전 하면 나무 모양 의 배열 이 한 점 으로 수정 되 지 않 습 니 다 - > 나 가서 오른쪽으로 돌 았 습 니 다. 지금 남 은 것 은 모두 22854 점 입 니 다. 구간 수정 은 앞의 한 점 수정, 구간 의 구 화 사상 에 따라 차이 점 조 가 매우 유용 하 다 는 것 을 알 게 되 었 습 니 다. 그러면 저 희 는 재 미 있 는 성질 을 발견 하기 어렵 지 않 습 니 다. 차이 점 조 d [i], 원수 조 a [i] 가 존재 합 니 다.[i] = ∑ k = 1 i d [i] a [i] a [i] [i] a [i]] = \ \ \ sum\ \ \ lims {k = 1} ^ {i} d [i] [i] a [i] [i] d [i] [i] a [i]] = k = 1 ∑ i d [1] = a [1] d [1] = a [1], d [2] = a [2] − a [1] = d [1] + d [2] + d [2] = a [2] − a [1] − a [1] + a [1] + a [1] + a [1] d [1] d [2] + a [1] + a [1] + a [1] + a [1] d [2] + a [1] d [2] = a [2] − a [1] = d [1] + d [2] = a [2] − a [1] + a [1]뒤 가 비슷 해서 우 리 는 접 두 사 를 구하 면 s [i] = ∑ k = 1 i a [i] = ∑ k = 1 i ∑ j = 1 k d [j] [j] s [i] = \ \ sum\ \ \ lims {k = 1} ^ ia [i] = \ \ sum\ \ \ lims {k = 1} {i} \ sum\ \ \ \ \ lims {j = 1} ^ {k} d [j] [j] s [j] [j] s [[j]] s [i] = 1 ∑ i a [i] = k = 1 ∑ i j = 1 ∑ i j = 1 ∑ i j = 1 ∑ k k d [1] d [1] d [1] d [1] d [1] d [1] d [1] d [1] d [1] i 회 누적, d [2] d [2] d [2] d [2]i - 1 번 누적 되 었 으 므 로 우 리 는 위의 n 2 n ^ 2 n2 의 식 자 를 s [i] = ∑ k = 1 i ∑ j = 1 k d [j] = ∑ k = 1 i d [k] [k] [k] ∗ (i - k + 1) = (i + 1) \8727℃ K = 1 i d [k] - − K K = 1 i d [k] - ∑ k = 1 i d [k] \8727k k s [k] [k] \8727k s [i] = \ sum\ \ lims {k = 1} \ \ sum\ \ \ \ \ lims {j j = 1} {K K K K} d [K] [k]] [k] * * * * * * * * * * * K s k s [k]]]] = \ \ sum \ \ limits {k = 1} ^ {i} d [k] * (i - k + 1) = (i + 1) * \ sum \ \ limits {k = 1} ^ {i} d [k]- \ \ \ \ sum\ \ lims {k = 1} ^ {i} d [k] * * k s [i]] = k = 1 ∑ i j = 1 ∑ k d [j] = k = 1 ∑ i d [k] ∗ (i - k + 1) = (i + 1) \8727k = 1 ∑ i d [k] - k = 1 ∑ i d [k] = 1 ∑ i d [k] \8727k [k] * * * * * * * * * * * * * * * K] ? (i - k] * k] * 1) = (i + 1) \872727k k = 1 ∑ i d [k] - k = 1 ∑ K = 1 ∑ i d [k] \8727k] [k] \8727k] d [i] * i d [i]∗ i, 그리고 조회 할 때 위의 식 을 끼 우 면 됩 니 다. 선분 나무 보다 훨씬 간단 하지 않 습 니까?
2 차원 트 리 배열
1 차원 나무 모양 배열, 1 차원 나무 모양 배열 배열 에 있어 접두사 와 매번 lowbit 를 줄 이 는 위 치 를 합치 면 우 리 는 2 차원 에 놓 으 면 먼저 가로로 화 해 를 구하 고 세로 로 화 해 를 구 하 는 것 을 상상 할 수 있 습 니 다. 그래서...
for (int i=x;i;i-=lowbit(i)
for (int k=y;k;k-=lowbit(k)
이렇게 하면 접두사 와 접 두 사 를 얻 을 수 있 습 니 다. 그러나 저 는 조작 유형 을 수정 하여 1 차원 나무 모양 배열 의 차이 점 을 비교 해 보라 고 요구 합 니 다. 우 리 는 그것 에 대해 2 차원 차 점 을 만 들 고 2 차원 접두사 와 i, k 의 2 차원 접두사 와 합 은 s [i] = s [i - 1] [k] + s [i] [k - 1] - s [i - 1] [k - 1] + a [i] [k - 1][k - 1] + a [i] [k] s [i] [k] [k] [k] [k] + s [i] [k − 1] − s [i − 1] [k − 1] + a [i] [k] [k − 1] + a [k] [i] = a [i] [k] − a [i − a [i − 1] [k] − a [i] [k] − a [i] [k − a [i] [k − a] [i] [k − 1] + a [i − 1] [k − 1] [k − 1] [k − 1] + a [i] [k − 1] [i] + a [i] + a [i] + a [i] [k − 1] [k - 1] + a [i - 1] [k - 1] d [i] = a [i] [k] − a [1] [k] − a [i] [k − 1] + a [i − 1] [k − 1]그 다음 에 d [i] [k] [d [i] [k] d [[k] [d] [[k] [i] [i] [i] [k] [k]] [k] d [i]] [k] d [[k] [d] [y] [y] [k]] [k] 에 도 1 차원 과 유사 한 성질 d [i] [i] [i] [k] = ∑ x = 1 i = △ sum\ \ \ \ lims {i} \ sum\ \ \ \ \ \ lims lims {y = 1 k [x] [y] [y] [y] [y] [k] [k] [k] [k] [k] [k]]] [k]]]] = \ \ \ \ \ \ \ \ sum\ \ \ \ \ \ \ \ \ lims 바로 s [i] [k][y] [y] [k]] [k] = \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lims {j =} ^ {i} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lims {j =}}} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lims {y =} ^ {l} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 제한 {{{{{l} [x] [y] [y]] [y]] [k]]] = j = = = 1 처처처K K K K K x = = 1 처처처처도 폭 했 구나! 그리고 최적화 하기 시 작 했 는데 d [1] [1] d [1] [1] d [1] [1] [1] 은 i * 8727 k i * k i * 8727 k 회, d [2] 를 사용 했다.[2] d [2] [2] d [2] [2] i ∗ (k − 1) i * (k - 1) i ∗ (k − 1) 회 를 사 용 했 기 때문에 차분 조 의 d [x] [y] d [x] [y] d [x] [y] [y] 를 얻 었 다 (i - x + 1) ∗ (k - y + 1) (i - x + 1) * (i - x + 1) * (k - y + 1) (i - x + 1) (i - x + 1) (i - x + 1) ∗ (k - x + 1) ∗ (k - y + 1) 회 를 사 용 했 고, 상면 식 s [i] [k] [k] [k]] [k]] [k]] [x = 1 i ∑ y = 1 k d [x] [y] ∗ (i − x + 1) ∗ (k − y + 1) s [i] [k]= \ \ \ \ \ \ sum\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lims {y =} ^ {k} d [x] [y] [y] * (i - x + 1) * (k - y + 1) s [i] [k]] [k] = \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ lims {x] [y] * * (i - x + 1) * (k - y + 1) s [[k] [1) [k - y + 1) [k - y + 1) [k - y + 1] [k - y + 1] [k - y + 1] [k - y + 1] s [k] [k] [k] [k]]]] [k]] [k - y + 1] [k] [1] 1) ∗ (k − y + 1) = \ sum \ \ limits {x = 1} ^ {i} \ sum \ \ limits {y = 1} ^ {k} d [x] [y] * (i - x + 1) * (k - y + 1) =x=1∑iy=1∑kd[x][y]∗(i−x+1)∗(k−y+1) = ∑ x = 1 i ∑ y = 1 k d [ x ] [ y ] ∗ ( i + 1 ) ∗ ( k + 1 − y ) − ∑ x = 1 i ∑ y = 1 k d [ x ] [ y ] ∗ x ∗ ( k + 1 − y ) =\sum\limits_{x=1}^{i}\sum\limits_{y=1}^{k}d[x][y]*(i+1)*(k+1-y)-\sum\limits_{x=1}^{i}\sum\limits_{y=1}^{k}d[x][y]*x*(k+1-y) =x=1∑iy=1∑kd[x][y]∗(i+1)∗(k+1−y)−x=1∑iy=1∑kd[x][y]∗x∗(k+1−y) = ∑ x = 1 i ∑ y = 1 k d [ x ] [ y ] ∗ ( i + 1 ) ∗ ( k + 1 ) − ∑ x = 1 i ∑ y = 1 k d [ x ] [ y ] ∗ ( i + 1 ) ∗ y − ∑ x = 1 i ∑ y = 1 k d [ x ] [ y ] ∗ x ∗ ( k + 1 ) + ∑ x = 1 i ∑ y = 1 k d [ x ] [ y ] ∗ x ∗ y =\sum\limits_{x=1}^{i}\sum\limits_{y=1}^{k}d[x][y]*(i+1)*(k+1)-\sum\limits_{x=1}^{i}\sum\limits_{y=1}^{k}d[x][y]*(i+1)*y-\sum\limits_{x=1}^{i}\sum\limits_{y=1}^{k}d[x][y]*x*(k+1)+\sum\limits_{x=1}^{i}\sum\limits_{y=1}^{k}d[x][y]*x*y =x=1∑iy=1∑kd[x][y]∗(i+1)∗(k+1)−x=1∑iy=1∑kd[x][y]∗(i+1)∗y−x=1∑iy=1∑kd[x][y]∗x∗(k+1)+x=1∑iy=1∑kd[x] [y] ∗ x ∗ y 를 정리 한 다음 에 얻 을 수 있 는 (i + 1) ∗ (k + 1) ∗ ∑ x = 1 i ∑ y = 1 k d [x] [y]] - (i + 1) ∗ ∑ x = 1 k d [x] [x] [y] ∗ y - (k + 1) ∗ ∑ x = 1 k d [x] [y] \8727y - (k + 1) ∗ ∑ x = 1 i ∑ y = 1 k d [x] [x] [y] \8727x x + ∑ x = 1 k ∗ x x + ∑ x = 1 k k d [x] \8727x x] [x] [x] [x]]] [y] [y] * * * * \ sum \ \ limits {x = 1} ^ {i} \ \ sum \ \ limits {y = 1} ^ {k} d [x] [y] - (i + 1)*\sum\limits_{x=1}^{i}\sum\limits_{y=1}^{k}d[x][y]*y-(k+1)*\sum\limits_{x=1}^{i}\sum\limits_{y=1}^{k}d[x][y]*x+\sum\limits_{x=1}^{i}\sum\limits_{y=1}^{k}d[x][y]*x*y (i+1)∗(k+1)∗x=1∑iy=1∑kd[x][y]−(i+1)∗x=1∑iy=1∑kd[x][y]∗y−(k+1)∗x=1∑iy=1∑kd[x][y]∗x+x=1∑iy=1∑kd[x][y]이 정도 면 잘 유지 할 수 있 습 니 다. 우 리 는 4 개의 2 차원 나무 모양 배열 을 유지 하고 있 습 니 다. d [i] [k] [i] [k] [i] [k] [i] [k] d [i] [k] [i] [i] [k] [[i] [k] [i] [k] [[i]] [k] ∗ k d [i]] [k] \8727k k d [i] [k] [k] * k d [i] [k] * * k d [i]] [k] * * * k d [i]] [k] \8727k k k k, d [i] [i] [k] [i] [k] \8727i] [i] [K] K * * K * K * k d [i * k d] [k] * 8727 ° i * 8727 ° k, 그리고 그 다음 이 없습니다. 2 차원 차 이 를 주의 할 때 사각형 {x1, y1} {x2, y2}가 치 를 더 하면 차이 점수 그룹 에 서 는 d [x 1] [y 1] [y 1] + = v a l d [x1] [y1] + = val d [x1] [x1] [y1] [y1] + = val, d [x 2 + 1] [y 2 + 1] [y 2 + 1] + = v a l d [x2+ 1] [y2 + 1] + + = val d [x2+ 1] [y2 + 1] [y2 + 1] + = val, d [x 2 + 1] d [x 2 + 1] [y 1]] [y 1] − = v a l d [x 2 + 1] [x 2 + 1] + 1] + 1] + 1] [y1] - 1] [y1] - 1] - [y1] - = d [x2+ 1] y2 + 1] − = v a l d [x1] [y2 + 1] - = val d [x1] [y2 + 1]− = val, 왜?
그래서 이 문 제 는 누 드 문제 입 니 다.
코드
//By AcerMo
#include
#include
#include
#include
#include
#define lowbit(x) x&(-x)
using namespace std;
const int M=2500;
int n,m;
int s1[M][M],s2[M][M],s3[M][M],s4[M][M];
inline void read(int &x)
{
x=0;int f=1;char ch=getchar();
while (!isdigit(ch)) ch=='-'?f=0:f=1,ch=getchar();
while (isdigit(ch)) x=x*10+ch-'0',ch=getchar();
if (!f) x*=-1;
}
inline void write(int x)
{
if (x<0) putchar('-'),x=-x;
if (x>9) write(x/10);
putchar(x%10+'0');
return ;
}
inline void add(int x,int y,int z)
{
for (int i=x;i<=n;i+=lowbit(i))
for (int k=y;k<=m;k+=lowbit(k))
s1[i][k]+=z,s4[i][k]+=z*x*y,
s3[i][k]+=z*y,s2[i][k]+=z*x;
return ;
}
inline int sum(int x,int y)
{
int a1=0,a2=0,a3=0,a4=0;
for (int i=x;i;i-=lowbit(i))
for (int k=y;k;k-=lowbit(k))
a1+=s1[i][k],a2+=s2[i][k],a3+=s3[i][k],a4+=s4[i][k];
a1*=(x+1)*(y+1);a2*=(y+1);a3*=(x+1);
a1-=a2;a1-=a3;a1+=a4;
return a1;
}
signed main()
{
char c=getchar();
read(n);read(m);
int a,b,x,y,z;
while (cin>>c)
{
read(a);read(b);read(x);read(y);
if (c=='L')
{
read(z);
add(a,b,z);add(x+1,y+1,z);
add(a,y+1,-z);add(x+1,b,-z);
}
else
{
int a1=sum(x,y),a2=sum(a-1,b-1);
int a3=sum(x,b-1),a4=sum(a-1,y);
write(a1+a2-a3-a4);puts("");
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[문제 풀이] [POJ 3417] 어두 운 연쇄 [LCA + 트 리 차이 점]당신 의 임 무 는 다 크 를 연결 되 지 않 는 두 부분 으로 자 르 는 것 입 니 다.처음에는 Dark 의 부가 변 이 무적 상 태 였 고, 주요 변 을 선택 하여 차단 할 수 밖 에 없 었 다.메 인 사 이 드...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.