Nhảy chuyển đến

ST biểu

Định nghĩa

ST 表示意图

ST biểu ( Sparse Table, thưa thớt biểu ) là dùng cho giải quyếtNhưng lặp lại cống hiến vấn đềSố liệu kết cấu.

Cái gì là nhưng lặp lại cống hiến vấn đề?

Nhưng lặp lại cống hiến vấn đềLà chỉ đối với giải toán,Thỏa mãn,Tắc đối ứng khu gian dò hỏi chính là một cái nhưng lặp lại cống hiến vấn đề. Tỷ như, cực đại có,gcd có,Cho nên RMQ cùng khu gian GCD chính là một cái nhưng lặp lại cống hiến vấn đề. Giống khu gian cùng liền không có cái này tính chất, nếu cầu khu gian cùng thời điểm chọn dùng dự xử lý khu gian trùng điệp, tắc sẽ dẫn tới trùng điệp bộ phận bị tính toán hai lần, đây là chúng ta sở không muốn nhìn đến. Mặt khác,Còn cần thiết thỏa mãn kết hợp luật mới có thể sử dụng ST biểu cầu giải.

Cái gì là RMQ?

RMQ là tiếng Anh Range Maximum/Minimum Query viết tắt, tỏ vẻ khu gian lớn nhất ( nhỏ nhất ) giá trị. Giải quyết RMQ vấn đề có rất nhiều loại phương pháp, có thể tham khảoRMQ chuyên đề.

Dẫn vào

ST biểu khuôn mẫu đề

Đề mục đại ý: Cấp địnhCái số, cóCái dò hỏi, đối với mỗi cái dò hỏi, ngươi yêu cầu trả lời khu gianTrung cực đại.

Suy xét bạo lực cách làm. Mỗi lần đều đối khu gianRà quét một lần, cầu ra cực đại.

Hiển nhiên, cái này thuật toán sẽ siêu khi.

ST biểu

ST biểu căn cứ vàoTăng gấp bộiTư tưởng, có thể làm đượcDự xử lý,Trả lời mỗi cái dò hỏi. Nhưng là không duy trì sửa chữa thao tác.

Căn cứ vào tăng gấp bội tư tưởng, chúng ta suy xét như thế nào cầu ra khu gian cực đại. Có thể phát hiện, nếu dựa theo giống nhau tăng gấp bội lưu trình, mỗi lần nhảyBước nói, dò hỏi khi phức tạp độ như cũ là,Cũng không có so đoạn thẳng thụ càng ưu, ngược lại dự xử lý một bước còn so đoạn thẳng thụ chậm.

Chúng ta phát hiện,Nói cách khác, khu gian cực đại là một cái có “Nhưng lặp lại cống hiến” tính chất vấn đề. Cho dù dùng để cầu giải dự xử lý khu gian có trùng điệp bộ phận, chỉ cần này đó khu gian cũng là sở cầu khu gian, cuối cùng tính toán ra đáp án chính là chính xác.

Nếu tay động bắt chước một chút, có thể phát hiện chúng ta có thể sử dụng nhiều nhất hai cái dự xử lý quá khu gian tới bao trùm dò hỏi khu gian, nói cách khác dò hỏi khi thời gian phức tạp độ có thể bị giáng đến,Ở xử lý có đại lượng dò hỏi đề mục khi thập phần hữu hiệu.

Cụ thể thực hiện như sau:

LệnhTỏ vẻ khu gianCực đại.

Hiển nhiên.

Căn cứ định nghĩa thức, đệ nhị duy liền tương đương với tăng gấp bội thời điểm “NhảyBước”, căn cứ tăng gấp bội ý nghĩ, viết ra trạng thái dời đi phương trình:.

Trở lên chính là dự xử lý bộ phận. Mà đối với tuần tra, có thể đơn giản thực hiện như sau:

Đối với mỗi cái dò hỏi,Chúng ta đem nó phân thành hai bộ phận:Cùng,Trong đó.Hai bộ phận kết quả cực đại chính là trả lời.

ST 表的查询过程

Căn cứ mặt trên đối với “Nhưng lặp lại cống hiến vấn đề” luận chứng, bởi vì cực đại là “Nhưng lặp lại cống hiến vấn đề”, trùng điệp cũng không sẽ đối khu gian cực đại sinh ra ảnh hưởng. Lại bởi vì này hai cái khu gian hoàn toàn bao trùm,Có thể bảo đảm đáp án chính xác tính.

Khuôn mẫu số hiệu

ST biểu khuôn mẫu đề

C phong cách khuôn mẫu

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
#include&LTalgorithm>
#include&LTiostream>
usingnamespacestd;
constexprintMAXN=2000001;
constexprintlogN=21;
intf[MAXN][logN+1],Logn[MAXN+1];

voidpre(){// chuẩn bị công tác, khởi động lại
Logn[1]=0;
Logn[2]=1;
for(inti=3;iMAXN;i++){
Logn[i]=Logn[i/2]+1;
}
}

intmain(){
cin.tie(nullptr)->sync_with_stdio(false);
intn,m;
cin>>n>>m;
for(inti=1;in;i++)cin>>f[i][0];
pre();
for(intj=1;jlogN;j++)
for(inti=1;i+(1j)-1n;i++)
f[i][j]=max(f[i][j-1],f[i+(1(j-1))][j-1]);// ST biểu cụ thể thực hiện
for(inti=1;im;i++){
intx,y;
cin>>x>>y;
ints=Logn[y-x+1];
coutmax(f[x][s],f[y-(1s)+1][s])'\n';
}
return0;
}

C++ phong cách khuôn mẫu

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
#include&LTbits/stdc++.h>
usingnamespacestd;

templatetypenameT>
classSparseTable{
usingVT=vectorT>;
usingVVT=vectorVT>;
usingfunc_type=functionT(constT&,constT&)>;

VVTST;

staticTdefault_func(constT&t1,constT&t2){returnmax(t1,t2);}

func_typeop;

public:
SparseTable(constvectorT>&v,func_type_func=default_func){
op=_func;
intlen=v.size(),l1=ceil(log2(len))+1;
ST.assign(len,VT(l1,0));
for(inti=0;ilen;++i){
ST[i][0]=v[i];
}
for(intj=1;jl1;++j){
intpj=(1(j-1));
for(inti=0;i+pjlen;++i){
ST[i][j]=op(ST[i][j-1],ST[i+(1(j-1))][j-1]);
}
}
}

Tquery(intl,intr){
intlt=r-l+1;
intq=floor(log2(lt));
returnop(ST[l][q],ST[r-(1q)+1][q]);
}
};

Chú ý điểm

  1. Đưa vào phát ra số liệu giống nhau rất nhiều, kiến nghị mở ra đưa vào phát ra ưu hoá.

  2. Mỗi lần dùngstd::logMột lần nữa tính toán log hàm số giá trị cũng không đáng giá, kiến nghị tiến hành như sau dự xử lý:

ST biểu giữ gìn mặt khác tin tức

Trừ RMQ bên ngoài, còn có cái khác “Nhưng lặp lại cống hiến vấn đề”. Tỷ như “Khu gian ấn vị cùng”, “Khu gian ấn vị hoặc”, “Khu gian GCD”, ST biểu đều có thể hiệu suất cao mà giải quyết.

Yêu cầu chú ý chính là, đối với “Khu gian GCD”, ST biểu tuần tra phức tạp độ cũng không có so đoạn thẳng thụ càng ưu ( lệnh giá trị vực vì,ST biểu tuần tra phức tạp độ vì,Mà đoạn thẳng thụ vì,Thả giá trị vực giống nhau là lớn hơn), nhưng là ST biểu dự xử lý phức tạp độ cũng không có so đoạn thẳng thụ càng kém, mà biên trình phức tạp độ phương diện ST biểu so đoạn thẳng thụ đơn giản rất nhiều.

Nếu phân tích một chút, “Nhưng lặp lại cống hiến vấn đề” giống nhau đều có chứa nào đó cùng loại RMQ thành phần. Tỷ như “Khu gian ấn vị cùng” chính là mỗi một vị lấy nhỏ nhất giá trị, mà “Khu gian GCD” còn lại là mỗi một cái số nhân chỉ số lấy nhỏ nhất giá trị.

Tổng kết

ST biểu có thể tương đối tốt giữ gìn “Nhưng lặp lại cống hiến” khu gian tin tức ( đồng thời cũng ứng thỏa mãn kết hợp luật ), thời gian phức tạp độ so thấp, số hiệu lượng tương đối mặt khác thuật toán rất nhỏ. Nhưng là, ST biểu có thể giữ gìn tin tức phi thường hữu hạn, không thể tương đối tốt mà mở rộng, hơn nữa không duy trì sửa chữa thao tác.

Luyện tập

RMQ khuôn mẫu đề

“SCOI2007” lượng mưa

[USACO07JAN] cân bằng đội hình Balanced Lineup

Phụ lục: ST biểu cầu khu gian GCD thời gian phức tạp độ phân tích

Ở thuật toán vận hành thời điểm, khả năng phải trải quaThứ thay đổi. Mỗi một lần thay đổi đều khả năng sẽ sử dụng GCD hàm số tiến hành đệ quy, lệnh giá trị vực vì,GCD hàm số thời gian phức tạp độ tối cao là,Cho nên tổng thời gian phức tạp độ nhìn như có.

Nhưng là, ở GCD trong quá trình, mỗi một lần đệ quy ( trừ cuối cùng một lần đệ quy ở ngoài ) đều sẽ sử dãy số trung nào đó số ít nhất giảm phân nửa, mà dãy số trung số nhiều nhất giảm phân nửa số lần vì,Cho nên, GCD đệ quy bộ phận nhiều nhất chỉ biết vận hànhThứ. Hơn nữa tuần hoàn bộ phận ( cùng với cuối cùng một tầng đệ quy ),Cuối cùng thời gian phức tạp độ còn lại là,Bởi vì có thể cấu tạo số liệu khiến cho thời gian phức tạp độ vì,Cho nên cuối cùng thời gian phức tạp độ tức vì.

Mà tuần tra bộ phận thời gian phức tạp độ thực hảo phân tích, suy xét nhất kém tình huống, tức mỗi lần dò hỏi đều dò hỏi nhất kém một đôi số, thời gian phức tạp độ vì.Bởi vậy, ST biểu giữ gìn “Khu gian GCD” thời gian phức tạp độ vì dự xử lý,Đơn thứ tuần tra.

Đoạn thẳng thụ tương ứng thao tác là dự xử lý,Tuần tra.

Này cũng không phải một cái nghiêm cẩn toán học luận chứng, càng vì nghiêm cẩn bám vào phía dưới:

Càng nghiêm cẩn chứng minh

Lý giải bổn đoạn, khả năng yêu cầu cụ bịThời gian phức tạp độVề “Thế năng phân tích pháp” tri thức.

Trước phân tích dự xử lý bộ phận thời gian phức tạp độ:

Thiết “Cần nghiên cứu thêm lự dãy số” vì ở dự xử lý ST biểu thời điểm trước mặt tầng tuần hoàn dãy số. Tỷ như, đệ linh tầng dãy số chính là nguyên dãy số, tầng thứ nhất dãy số chính là đệ linh tầng dãy số trải qua một lần thay đổi lúc sau dãy số, tứcst[1..n][1],Chúng ta đem này nhớ vì.

Mà thế năng hàm số liền định nghĩa vì “Cần nghiên cứu thêm lự dãy số” trung sở hữu số mệt thừa lấy nhị vì đế đối số. Tức:.

Ở một lần thay đổi trung, sở tiêu phí thời gian tương đương với thay đổi tuần hoàn sở tiêu phí thời gian cùng GCD sở tiêu phí thời gian chi cùng. Trong đó, GCD tiêu phí thời gian có dài có ngắn. Ngắn nhất khả năng chỉ có hai lần thậm chí một lần đệ quy, mà dài nhất khả năng cóThứ đệ quy. Nhưng là, GCD trong quá trình, trừ nhất mở đầu một tầng cùng nhất mạt một tầng bên ngoài, mỗi lần đệ quy đều sẽ sử “Cần nghiên cứu thêm lự dãy số” trung nào đó kết quả ít nhất giảm phân nửa. Tức,Sẽ giảm bớt ít nhất,Nên tầng đệ quy sở dụng thời gian có thể bị thế năng hàm số đều quán.

Đồng thời, chúng ta có thể nhìn đến,Sơ giá trị lớn nhất vì,MàKhông tăng. Cho nên, ST biểu dự xử lý bộ phận thời gian phức tạp độ vì.