Khiêu chuyển chí

Sqrt Tree

Dẫn nhập

Cấp nhĩ nhất cá trường độ vi n đích tự liệt,Tái cấp nhĩ nhất cá mãn túc kết hợp luật đích vận toán( bỉ nhưQuân mãn túc kết hợp luật ), nhiên hậu đối vu mỗi nhất thứ khu gian tuân vấn,Ngã môn nhu yếu kế toán.

Sqrt Tree khả dĩ tạiĐích thời gian nội dự xử lý, tịnh tạiĐích thời gian nội hồi đáp tuân vấn.

Giải thích

Tự liệt phân khối

Thủ tiên ngã môn bả chỉnh cá tự liệt phân thànhCá khối, mỗi nhất khối đích đại tiểu vi.Đối vu mỗi cá khối, ngã môn kế toán:

  1. Khối nội đích tiền chuế khu gian tuân vấn
  2. Khối nội đích hậu chuế khu gian tuân vấn
  3. Duy hộ nhất cá ngạch ngoại đích sổ tổBiểu kỳ đệCá khối đáo đệCá khối đích khu gian đáp án.

Cử cá lệ tử, giả thiếtĐại biểu gia pháp vận toán,Tự liệt vi.

Thủ tiên ngã môn tương tự liệt phân thành tam khối, biến thành liễu.

Na ma mỗi nhất khối đích tiền chuế khu gian đáp án hòa hậu chuế khu gian đáp án phân biệt vi

Sổ tổ vi:

( đối vuĐích bất hợp pháp đích tình huống ngã môn giả thiết đáp án vi 0 )

Hiển nhiên ngã môn khả dĩ tạiĐích thời gian nội dự xử lý giá ta trị, không gian phục tạp độ đồng dạng thịĐích. Xử lý hảo chi hậu, ngã môn khả dĩ lợi dụng tha môn tạiĐích thời gian nội hồi đáp nhất ta khóa khối đích tuân vấn. Đãn đối vu na ta chỉnh cá khu gian đô tại nhất cá khối nội đích tuân vấn ngã môn nhưng bất năng xử lý, nhân thử ngã môn hoàn nhu yếu xử lý nhất ta đông tây.

Cấu kiến nhất khỏa thụ

Dung dịch tưởng đáo ngã môn tại mỗi cá khối nội đệ quy địa cấu tạo thượng thuật kết cấu dĩ chi trì khối nội đích tra tuân. Đối vu đại tiểu viĐích khối ngã môn khả dĩĐịa hồi đáp tuân vấn. Giá dạng ngã môn tựu kiến xuất liễu nhất khỏa thụ, mỗi nhất cá kết điểm đại biểu tự liệt đích nhất cá khu gian. Diệp tử kết điểm đích khu gian trường độ viHoặc.Nhất cá đại tiểu viĐích kết điểm hữuCá tử tiết điểm, vu thị chỉnh khỏa thụ đích cao độ thịĐích, mỗi nhất tằng đích khu gian tổng trường thịĐích, nhân thử ngã môn cấu kiến giá khỏa thụ đích phục tạp độ thịĐích.

Thụ cao độ đích chứng minh

Căn cư định nghĩa, thiết “Khống chế”Cá nguyên tố đích kết điểm đích tử thụ cao độ vi,Khả dĩ tả xuất đệ quy thức:

Tác hoán nguyênĐắc

Tái định nghĩa,Đại nhập hữu

Căn cư chủ định lý, khả tri,Nhân thử.

Hiện tại ngã môn khả dĩ tạiĐích thời gian nội hồi đáp tuân vấn. Đối vu tuân vấn,Ngã môn chỉ nhu yếu khoái tốc trảo đáo nhất cá khu gian trường độ tối tiểu đích kết điểmSử đắcNăng bao hàm,Giá dạngTạiĐích phân khối khu gian trung nhất định thị khóa khối đích, tựu khả dĩĐịa kế toán đáp án liễu. Tra tuân nhất thứ đích tổng thể phục tạp độ thị,Nhân vi thụ cao thịĐích. Bất quá ngã môn nhưng khả dĩ ưu hóa giá cá quá trình.

Ưu hóa tuân vấn phục tạp độ

Dung dịch tưởng đáo nhị phân cao độ, nhiên hậu khả dĩPhán đoạn thị phủ hợp pháp. Giá dạng phục tạp độ tựu biến thành liễu.Bất quá ngã môn nhưng khả dĩ tiến nhất bộ gia tốc giá nhất quá trình.

Ngã môn giả thiết

  1. Mỗi nhất khối đích đại tiểu đô thịĐích chỉnh sổ mịch thứ;
  2. Mỗi nhất tằng thượng đích khối đại tiểu thị tương đồng đích.

Vi thử ngã môn nhu yếu tại tự liệt đích mạt vị bổ sung nhất taNguyên tố, sử đắc tha đích trường độ biến thànhĐích chỉnh sổ thứ mịch. Tẫn quản hữu ta khối khả năng hội biến thành nguyên lai đích lưỡng bội đại tiểu, đãn giá dạng nhưng thịĐích, vu thị dự xử lý phân khối đích phục tạp độ nhưng thịĐích.

Hiện tại ngã môn khả dĩ khinh tùng địa xác định nhất cá tuân vấn khu gian thị phủ bị chỉnh cá địa bao hàm tại nhất cá khối trung. Đối vu khu gian( dĩ 0 vi khởi điểm ), ngã môn bả đoan điểm tả vi nhị tiến chế hình thức. Cử nhất cá lệ tử, đối vu,Nhị tiến chế biểu kỳ vi

Ngã môn tri đạo mỗi nhất tằng đích khu gian trường độ thị tương đồng đích, nhi phân khối đích đại tiểu dã thị tương đồng đích ( tại thượng thuật kỳ lệ trung). Giá ta khối hoàn toàn phúc cái liễu chỉnh cá tự liệt, nhân thử đệ nhất khối đại biểu đích nguyên tố vi( nhị tiến chế biểu kỳ vi), đệ nhị cá khối đại biểu đích nguyên tố khu gian vi( nhị tiến chế biểu kỳ vi), dĩ thử loại thôi. Ngã môn phát hiện giá ta tại đồng nhất cá khối nội đích nguyên tố đích vị trí tại nhị tiến chế thượng chỉ hữu hậuVị bất đồng ( thượng thuật kỳ lệ trung). Nhi kỳ lệ đíchDã chỉ hữu hậuVị bất đồng, nhân thử tha môn tại đồng nhất cá khối trung.

Nhân thử ngã môn nhu yếu kiểm tra khu gian lưỡng cá đoan điểm thị phủ chỉ hữu hậuVị bất đồng, tức.Nhân thử ngã môn khả dĩ khoái tốc trảo đáo đáp án khu gian sở tại đích tằng:

  1. Đối vu mỗi cá,Ngã môn trảo đáoTối cao vị thượng đích;
  2. Hiện tại đối vu nhất cá tuân vấn,Ngã môn kế toánĐích tối cao vị, giá dạng tựu khả dĩ khoái tốc xác định đáp án khu gian sở tại đích tằng.

Giá dạng ngã môn tựu khả dĩ tạiĐích thời gian nội hồi đáp tuân vấn lạp.

Canh tân nguyên tố đích quá trình

Ngã môn khả dĩ tại Sqrt Tree thượng canh tân nguyên tố, đan điểm tu cải hòa khu gian tu cải đô thị chi trì đích.

Đan điểm tu cải

Khảo lự nhất thứ đan điểm phú trị thao tác,Ngã môn hi vọng cao hiệu canh tân giá cá thao tác đích tín tức.

Phác tố thật hiện

Thủ tiên ngã môn lai khán khán tại tố liễu nhất thứ đan điểm tu cải hậu Sqrt Tree hội biến thành thập ma dạng tử.

Khảo lự nhất cá trường độ viĐích kết điểm dĩ cập đối ứng đích tự liệt:.Dung dịch phát hiện tạiHòaTrung đô chỉ hữuCá nguyên tố cải biến. Nhi tạiTrung tắc hữuCá nguyên tố bị cải biến. Nhân thử hữuCá nguyên tố tại thụ thượng bị canh tân. Nhân thử tại Sqrt Tree thượng đan điểm tu cải đích phục tạp độ thị.

Sử dụng Sqrt Tree thế đại B sổ tổ

Chú ý đáo đan điểm canh tân đích bình cảnh tại vu canh tân căn kết điểm đích.Nhân thử ngã môn thường thí dụng lánh nhất cá Sqrt Tree đại thế căn kết điểm đích,Xưng kỳ vi.Tha đích tác dụng hòa nguyên lai đích nhị duy sổ tổ nhất dạng, duy hộ chỉnh đoạn tuân vấn đích đáp án. Kỳ tha phi căn kết điểm nhưng nhiên sử dụngDuy hộ. Chú ý, như quả nhất cá Sqrt Tree căn kết điểm hữuKết cấu, xưng kỳ Sqrt Tree thịHàm hữu tác dẫnĐích; như quả nhất cá Sqrt Tree đích căn kết điểm hữuKết cấu, xưng kỳ thịMột hữu tác dẫnĐích. NhiGiá khỏa thụ bổn thân thị một hữu tác dẫn đích.

Nhân thử ngã môn khả dĩ giá dạng canh tânThụ:

  1. TạiĐích thời gian nội canh tânHòa.
  2. Canh tân,Tha đích trường độ thịĐích, đãn ngã môn chỉ nhu yếu canh tân kỳ trung đích nhất cá nguyên tố ( giá cá nguyên tố đại biểu liễu bị cải biến đích khối ), giá nhất bộ đích thời gian phục tạp độ thịĐích ( sử dụng phác tố thật hiện đích toán pháp ).
  3. Tiến nhập sản sinh biến hóa đích tử tiết điểm tịnh sử dụng phác tố thật hiện đích toán pháp tạiĐích thời gian nội canh tân tín tức.

Chú ý, tra tuân đích phục tạp độ nhưng thịĐích, nhân vi ngã môn tối đa sử dụngThụ nhất thứ. Vu thị đan điểm tu cải đích phục tạp độ tựu thịĐích.

Canh tân nhất cá khu gian

Sqrt Tree dã chi trì khu gian phúc cái thao tác,Tức bả khu gianĐích sổ toàn bộ biến thành.Đối thử ngã môn hữu lưỡng chủng thật hiện phương thức, kỳ trung nhất chủng hội hoa phíĐích phục tạp độ canh tân tín tức,Đích thời gian tra tuân; lánh nhất chủng tắc thịCanh tân tín tức, đãn tra tuân đích thời gian hội tăng gia đáo.

Ngã môn khả dĩ tượng tuyến đoạn thụ nhất dạng tại Sqrt Tree thượng đả lại tiêu ký. Đãn thị tại Sqrt Tree thượng hữu nhất điểm bất đồng. Nhân vi hạ truyện nhất cá kết điểm đích lại tiêu ký, phục tạp độ khả năng đạt đáo,Nhân thử ngã môn bất thị tại tuân vấn đích thời hầu hạ truyện tiêu ký, nhi thị khán phụ tiết điểm thị phủ hữu tiêu ký, như quả hữu tiêu ký tựu bả tha hạ truyện.

Đệ nhất chủng thật hiện

Tại đệ nhất chủng thật hiện trung, ngã môn chỉ hội cấp đệTằng đích kết điểm ( kết điểm khu gian trường độ vi) đả lại tiêu ký, tại hạ truyện tiêu ký đích thời hầu trực tiếp canh tân chỉnh cá tử thụ, phục tạp độ vi.Thao tác quá trình như hạ:

  1. Khảo lự đệTằng thượng đích kết điểm, đối vu na ta bị tu cải khu gian hoàn toàn bao hàm đích kết điểm, cấp tha môn đả nhất cá lại tiêu ký;

  2. Hữu lưỡng cá khối chỉ hữu bộ phân khu gian bị phúc cái, ngã môn trực tiếp tạiĐích thời gian nộiTrọng kiếnGiá lưỡng cá khối. Như quả tha bổn thân đái hữu chi tiền tu cải đích lại tiêu ký, tựu tại trọng kiến đích thời hầu thuận tiện hạ truyện tiêu ký;

  3. Canh tân căn kết điểm đíchHòa,Thời gian phục tạp độ;

  4. Trọng kiếnThụ, thời gian phục tạp độ.

Hiện tại ngã môn khả dĩ cao hiệu hoàn thành khu gian tu cải liễu. Na ma như hà lợi dụng lại tiêu ký hồi đáp tuân vấn? Thao tác như hạ:

  1. Như quả ngã môn đích tuân vấn bị bao hàm tại nhất cá hữu lại tiêu ký đích khối nội, khả dĩ lợi dụng lại tiêu ký kế toán đáp án;

  2. Như quả ngã môn đích tuân vấn bao hàm đa cá khối, na ma ngã môn chỉ nhu yếu quan tâm tối tả biên hòa tối hữu biên bất hoàn chỉnh khối đích đáp án. Trung gian đích khối đích đáp án khả dĩ tạiThụ trung tra tuân ( nhân viThụ tại mỗi thứ tu cải hoàn hậu hội trọng kiến ), phục tạp độ thị.

Nhân thử tuân vấn đích phục tạp độ nhưng vi.

Đệ nhị chủng thật hiện

Tại giá chủng thật hiện trung, mỗi nhất cá kết điểm đô khả dĩ bị đả thượng lại tiêu ký. Nhân thử tại xử lý nhất cá tuân vấn đích thời hầu, ngã môn nhu yếu khảo lự tổ tiên trung đích lại tiêu ký, na ma tra tuân đích phục tạp độ tương biến thành.Bất quá canh tân tín tức đích phục tạp độ tựu hội biến đắc canh khoái. Thao tác như hạ:

  1. Bị tu cải khu gian hoàn toàn bao hàm đích khối, ngã môn bả lại tiêu ký thiêm gia đáo giá ta khối thượng, phục tạp độ;
  2. Bị tu cải khu gian bộ phân phúc cái đích khối, canh tânHòa,Phục tạp độ( nhân vi chỉ hữu lưỡng cá bị tu cải đích khối );
  3. Canh tânThụ, phục tạp độ( sử dụng đồng dạng đích canh tân toán pháp );
  4. Đối vu một hữu tác dẫn đích tử thụ canh tân tha môn đích;
  5. Đệ quy địa canh tân lưỡng cá một hữu bị hoàn toàn phúc cái đích khu gian.

Thời gian phục tạp độ thị.

Thật hiện

Hạ diện đích thật hiện tạiĐích thời gian nội kiến thụ, tạiĐích thời gian nội hồi đáp tuân vấn, tạiĐích thời gian nội đan điểm tu cải.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
SqrtTreeItemop(constSqrtTreeItem&a,constSqrtTreeItem&b);

intlog2Up(intn){
intres=0;
while((1res)n){
res++;
}
returnres;
}

classSqrtTree{
private:
intn,lg,indexSz;
vectorSqrtTreeItem>v;
vectorint>clz,layers,onLayer;
vectorvectorSqrtTreeItem>>pref,suf,between;

voidbuildBlock(intlayer,intl,intr){
pref[layer][l]=v[l];
for(inti=l+1;ir;i++){
pref[layer][i]=op(pref[layer][i-1],v[i]);
}
suf[layer][r-1]=v[r-1];
for(inti=r-2;i>=l;i--){
suf[layer][i]=op(v[i],suf[layer][i+1]);
}
}

voidbuildBetween(intlayer,intlBound,intrBound,intbetweenOffs){
intbSzLog=(layers[layer]+1)>>1;
intbCntLog=layers[layer]>>1;
intbSz=1bSzLog;
intbCnt=(rBound-lBound+bSz-1)>>bSzLog;
for(inti=0;ibCnt;i++){
SqrtTreeItemans;
for(intj=i;jbCnt;j++){
SqrtTreeItemadd=suf[layer][lBound+(jbSzLog)];
ans=(i==j)?add:op(ans,add);
between[layer-1][betweenOffs+lBound+(ibCntLog)+j]=ans;
}
}
}

voidbuildBetweenZero(){
intbSzLog=(lg+1)>>1;
for(inti=0;iindexSz;i++){
v[n+i]=suf[0][ibSzLog];
}
build(1,n,n+indexSz,(1lg)-n);
}

voidupdateBetweenZero(intbid){
intbSzLog=(lg+1)>>1;
v[n+bid]=suf[0][bidbSzLog];
update(1,n,n+indexSz,(1lg)-n,n+bid);
}

voidbuild(intlayer,intlBound,intrBound,intbetweenOffs){
if(layer>=(int)layers.size()){
return;
}
intbSz=1((layers[layer]+1)>>1);
for(intl=lBound;lrBound;l+=bSz){
intr=min(l+bSz,rBound);
buildBlock(layer,l,r);
build(layer+1,l,r,betweenOffs);
}
if(layer==0){
buildBetweenZero();
}else{
buildBetween(layer,lBound,rBound,betweenOffs);
}
}

voidupdate(intlayer,intlBound,intrBound,intbetweenOffs,intx){
if(layer>=(int)layers.size()){
return;
}
intbSzLog=(layers[layer]+1)>>1;
intbSz=1bSzLog;
intblockIdx=(x-lBound)>>bSzLog;
intl=lBound+(blockIdxbSzLog);
intr=min(l+bSz,rBound);
buildBlock(layer,l,r);
if(layer==0){
updateBetweenZero(blockIdx);
}else{
buildBetween(layer,lBound,rBound,betweenOffs);
}
update(layer+1,l,r,betweenOffs,x);
}

SqrtTreeItemquery(intl,intr,intbetweenOffs,intbase){
if(l==r){
returnv[l];
}
if(l+1==r){
returnop(v[l],v[r]);
}
intlayer=onLayer[clz[(l-base)^(r-base)]];
intbSzLog=(layers[layer]+1)>>1;
intbCntLog=layers[layer]>>1;
intlBound=(((l-base)>>layers[layer])layers[layer])+base;
intlBlock=((l-lBound)>>bSzLog)+1;
intrBlock=((r-lBound)>>bSzLog)-1;
SqrtTreeItemans=suf[layer][l];
if(lBlockrBlock){
SqrtTreeItemadd=
(layer==0)?(query(n+lBlock,n+rBlock,(1lg)-n,n))
:(between[layer-1][betweenOffs+lBound+
(lBlockbCntLog)+rBlock]);
ans=op(ans,add);
}
ans=op(ans,pref[layer][r]);
returnans;
}

public:
SqrtTreeItemquery(intl,intr){returnquery(l,r,0,0);}

voidupdate(intx,constSqrtTreeItem&item){
v[x]=item;
update(0,0,n,0,x);
}

SqrtTree(constvectorSqrtTreeItem>&a)
:n((int)a.size()),lg(log2Up(n)),v(a),clz(1lg),onLayer(lg+1){
clz[0]=0;
for(inti=1;i(int)clz.size();i++){
clz[i]=clz[i>>1]+1;
}
inttlg=lg;
while(tlg>1){
onLayer[tlg]=(int)layers.size();
layers.push_back(tlg);
tlg=(tlg+1)>>1;
}
for(inti=lg-1;i>=0;i--){
onLayer[i]=max(onLayer[i],onLayer[i+1]);
}
intbetweenLayers=max(0,(int)layers.size()-1);
intbSzLog=(lg+1)>>1;
intbSz=1bSzLog;
indexSz=(n+bSz-1)>>bSzLog;
v.resize(n+indexSz);
pref.assign(layers.size(),vectorSqrtTreeItem>(n+indexSz));
suf.assign(layers.size(),vectorSqrtTreeItem>(n+indexSz));
between.assign(betweenLayers,vectorSqrtTreeItem>((1lg)+bSz));
build(0,0,n,0);
}
};

Tập đề

CodeChef - SEGPROD

Bổn hiệt diện chủ yếu dịch tựSqrt Tree - Algorithms for Competitive Programming,Bản quyền hiệp nghị vi CC-BY-SA 4.0.