Pagini recente » Cod sursa (job #2239091) | Cod sursa (job #1015077) | Cod sursa (job #2686179) | Cod sursa (job #2798827) | Cod sursa (job #1527011)
#include <bits/stdc++.h>
using namespace std;
//http://www.infoarena.ro/problema/euclid
#define M 608
ofstream out("plantatie.out");
int rmq[M][M][30],lg[M];
FILE * fila = fopen ( "plantatie.in" , "r" );
inline int maxi( int a, int b)
{
if(a>b)return a;
return b;
}
inline void RMQ(int n)
{ int i,j,a,b;
b=lg[n];
for(a=1;a<=b;a++)
for(i=1;i<=n-(1<<a)+1;i++)
for(j=1;j<=n-(1<<a)+1;j++)
{ int x,y,z;
x=maxi(rmq[i][j][a-1],rmq[i][j+(1<<(a-1))][a-1]);
y=maxi(x,rmq[i+(1<<(a-1))][j][a-1]);
z=maxi(y,rmq[i+(1<<(a-1))][j+(1<<(a-1))][a-1]);
rmq[i][j][a]=z;
}
}
inline int get_rmq(int a, int b,int nr)
{
int el=lg[nr];
int x=maxi(rmq[a][b][el],rmq[a][b+nr-(1<<(el))][el]);
int y=maxi(x, rmq[a+nr-(1<<el)][b][el]);
return maxi(y,rmq[a+nr-(1<<el)][b+nr-(1<<el)][el]);
}
#define MAX 10000
char buff[MAX];
int poz=0;
void citire(int &numar)
{ numar=0;
while(isdigit(buff[poz])==0)
{
++poz;
if(poz==MAX)
{fread(buff,1,MAX,fila); poz=0;}
}
while(isdigit(buff[poz]))
{
numar=numar*10+buff[poz]-'0';
++poz;
if(poz==MAX){fread(buff,1,MAX,fila);poz=0;}
}
}
int main()
{ int m,n,h,w,t,nr,i,j,k,l,a,b;
citire(n);
citire(m);
for(i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
citire(rmq[i][j][0]);
RMQ(n);
for(i=1;i<=m;i++)
{
citire(a);
citire(b);
citire(l);
out<<get_rmq(a,b,l)<<'\n';
}
return 0;
}