#include<bits/stdc++.h>
using namespace std;
/*Helper array for my method*/
int maxval[100];
/*Helper array for dtldarek's method*/
int b[10][10];
/*Helper 2-D array for saving output*/
int op[10][10];
/*Helper function to print output*/
void print(int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout << op[i][j] << " ";
}
cout << endl;
}
}
void myMethod(int val[], int n){
cout << "My Method:" << endl;
for(int i = 1; i<=n; i++)
maxval[i] = val[i];
for(int gap = 2; gap<=n; gap++){
for(int i = 1, j = gap; j<=n; i++, j++){
maxval[i] = max(maxval[i],val[j]);
op[i][j] = maxval[i];
}
}
print(n);
cout << endl;
}
void dtldarekMethod(int val[], int n){
cout << "dtldarek's Method:" << endl;
int limit = (int)log2(n);
for(int i = 1; i<=n; i++){
for(int j = 1; j<=limit; j++){
b[i][j]=val[i];
int tempLimit = i+(int)pow(2,j)-1;
for(int k = i+1; k<=tempLimit; k++){
b[i][j] = max(b[i][j],val[k]);
}
}
}
for(int x=1;x<=n;x++){
for(int y=x+1;y<=n;y++){
int z = (int)log2(y-x+1);
int ans = max(b[x][z], b[y-(int)pow(2,z)+1][z]);
op[x][y] = ans;
}
}
print(n);
cout << endl;
}
int main(){
/*One-based index*/
int val[6] = {0,2,3,7,4,1};
int n = 5;
cout << "Original Array:";
for(int i=1;i<=5;i++)
cout << val[i] << " ";
cout << endl;
myMethod(val,n);
dtldarekMethod(val,n);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8qSGVscGVyIGFycmF5IGZvciBteSBtZXRob2QqLwppbnQgbWF4dmFsWzEwMF07CgovKkhlbHBlciBhcnJheSBmb3IgZHRsZGFyZWsncyBtZXRob2QqLwppbnQgYlsxMF1bMTBdOwoKLypIZWxwZXIgMi1EIGFycmF5IGZvciBzYXZpbmcgb3V0cHV0Ki8KaW50IG9wWzEwXVsxMF07CgovKkhlbHBlciBmdW5jdGlvbiB0byBwcmludCBvdXRwdXQqLwp2b2lkIHByaW50KGludCBuKXsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICBmb3IoaW50IGo9MTtqPD1uO2orKyl7CiAgICAgICAgICAgIGNvdXQgPDwgb3BbaV1bal0gPDwgIiAiOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9Cn0KCgp2b2lkIG15TWV0aG9kKGludCB2YWxbXSwgaW50IG4pewogICAgY291dCA8PCAiTXkgTWV0aG9kOiIgPDwgZW5kbDsKCglmb3IoaW50IGkgPSAxOyBpPD1uOyBpKyspCgkJbWF4dmFsW2ldID0gdmFsW2ldOwoJCQogICAgZm9yKGludCBnYXAgPSAyOyBnYXA8PW47IGdhcCsrKXsKICAgICAgICBmb3IoaW50IGkgPSAxLCBqID0gZ2FwOyBqPD1uOyBpKyssIGorKyl7CiAgICAgICAgICAgIG1heHZhbFtpXSA9IG1heChtYXh2YWxbaV0sdmFsW2pdKTsKICAgICAgICAgICAgb3BbaV1bal0gPSBtYXh2YWxbaV07CiAgICAgICAgfQogICAgfQogICAgcHJpbnQobik7CiAgICBjb3V0IDw8IGVuZGw7Cn0KCnZvaWQgZHRsZGFyZWtNZXRob2QoaW50IHZhbFtdLCBpbnQgbil7CgogICAgY291dCA8PCAiZHRsZGFyZWsncyBNZXRob2Q6IiA8PCBlbmRsOwoKICAgIGludCBsaW1pdCA9IChpbnQpbG9nMihuKTsKCiAgICBmb3IoaW50IGkgPSAxOyBpPD1uOyBpKyspewogICAgICAgIGZvcihpbnQgaiA9IDE7IGo8PWxpbWl0OyBqKyspewogICAgICAgICAgICBiW2ldW2pdPXZhbFtpXTsKICAgICAgICAgICAgaW50IHRlbXBMaW1pdCA9IGkrKGludClwb3coMixqKS0xOwogICAgICAgICAgICBmb3IoaW50IGsgPSBpKzE7IGs8PXRlbXBMaW1pdDsgaysrKXsKICAgICAgICAgICAgICAgIGJbaV1bal0gPSBtYXgoYltpXVtqXSx2YWxba10pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZm9yKGludCB4PTE7eDw9bjt4KyspewogICAgICAgIGZvcihpbnQgeT14KzE7eTw9bjt5KyspewogICAgICAgICAgICBpbnQgeiA9IChpbnQpbG9nMih5LXgrMSk7CiAgICAgICAgICAgIGludCBhbnMgPSBtYXgoYlt4XVt6XSwgYlt5LShpbnQpcG93KDIseikrMV1bel0pOwogICAgICAgICAgICBvcFt4XVt5XSA9IGFuczsKICAgICAgICB9CiAgICB9CiAgICBwcmludChuKTsKICAgIGNvdXQgPDwgZW5kbDsKfQoKaW50IG1haW4oKXsKICAgIC8qT25lLWJhc2VkIGluZGV4Ki8KICAgIGludCB2YWxbNl0gPSB7MCwyLDMsNyw0LDF9OwogICAgaW50IG4gPSA1OwoKICAgIGNvdXQgPDwgIk9yaWdpbmFsIEFycmF5OiI7CiAgICBmb3IoaW50IGk9MTtpPD01O2krKykKICAgICAgICBjb3V0IDw8IHZhbFtpXSA8PCAiICI7CgogICAgY291dCA8PCBlbmRsOwoKICAgIG15TWV0aG9kKHZhbCxuKTsKICAgIGR0bGRhcmVrTWV0aG9kKHZhbCxuKTsKCiAgICByZXR1cm4gMDsKfQo=