Pagini recente » Diferente pentru utilizator/raluca1234 intre reviziile 24 si 25 | Monitorul de evaluare | Clasament rating | Diferente pentru preoni-2007/runda-3/solutii intre reviziile 1 si 2 | Cod sursa (job #1888051)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int N,M,rmq[501][501][11];
void precompute(){
for (int p=1;(1<<p)<=N;p++){
for (int i=1;i+(1<<p)-1<=N;i++){
for (int j=1;j+(1<<p)-1<=N;j++){
int k1,k2,k3,k4;
k1=rmq[i][j][p-1];
k2=rmq[i+(1<<(p-1))][j][p-1];
k3=rmq[i][j+(1<<(p-1))][p-1];
k4=rmq[i+(1<<(p-1))][j+(1<<(p-1))][p-1];;
rmq[i][j][p]=max(max(k1,k2),max(k3,k4));
}
}
}
}
int query(int i,int j,int k){
int p=int(log2(k));
int dif=k-(1<<p);
int k1,k2,k3,k4;
k1=rmq[i][j][p];
k2=rmq[i][j+dif][p];
k3=rmq[i+dif][j][p];
k4=rmq[i+dif][j+dif][p];
return max(max(k1,k2),max(k3,k4));
}
int main(){
fin >>N>>M;
for (int i=1;i<=N;i++)
for (int j=1;j<=N;j++){
fin >>rmq[i][j][0];
}
precompute();
while(M--){
int a,b,c;
fin >>a>>b>>c;
fout<<query(a,b,c)<<"\n";
}
return 0;
}