Cod sursa(job #2556160)

Utilizator 1chiriacOctavian Neculau 1chiriac Data 24 februarie 2020 18:40:16
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;
const int lim=1005;int u=lim-1;char sir[1005];
void next () {
	++u;
	if(u==lim)
		fread(sir,1,lim,stdin),u=0;
}
void get (int &nr) {
	nr=0;
	for(;sir[u]<'0' || sir[u]>'9';next());
	for(;sir[u]>='0' && sir[u]<='9';next())
		nr=nr*10+sir[u]-'0';
}
int n,m,rmq[505][505][15],lg[505],nr1,nr2,nr3;
void build_rmq () {
	for(int i=2;i<=n;++i)
		lg[i]=lg[(i>>1)]+1;
	for(int i=1;i<=lg[n];++i)
		for(int j=1;j+(1<<i)-1<=n;++j)
			for(int k=1;k+(1<<i)-1<=n;++k)
				rmq[j][k][i]=max(max(rmq[j][k][i-1],rmq[j+(1<<(i-1))][k][i-1]),max(rmq[j][k+(1<<(i-1))][i-1],rmq[j+(1<<(i-1))][k+(1<<(i-1))][i-1]));
}
int querrys (int i,int j,int lat) {
	return max(max(rmq[i][j][lg[lat]],rmq[i+lat-(1<<lg[lat])][j][lg[lat]]),max(rmq[i][j+lat-(1<<lg[lat])][lg[lat]],rmq[i+lat-(1<<lg[lat])][j+lat-(1<<lg[lat])][lg[lat]]));
}
int main () {
	freopen("plantatie.in","r",stdin);
	freopen("plantatie.out","w",stdout);
	get(n);get(m);++m;//scanf("%d%d", &n, &m);++m;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			get(rmq[i][j][0]);//scanf("%d", &rmq[i][j][0]);
	build_rmq();
	while(--m) {
		get(nr1);get(nr2);get(nr3);
		//scanf("%d%d%d", &nr1, &nr2, &nr3);
		printf("%d \n", querrys(nr1,nr2,nr3));
	}
	return 0;
}