Pagini recente » Diferente pentru utilizator/blacknesta intre reviziile 42 si 41 | Diferente pentru home intre reviziile 553 si 902 | Monitorul de evaluare | Istoria paginii runda/pregatire_ichb_2017 | Cod sursa (job #20046)
Cod sursa(job #20046)
using namespace std;
#include<fstream>
#include<stdio.h>
#define nmax 505
int a[nmax][nmax][21];
int minim(int x,int y)
{
if(x<y)
return y;
return x;
}
int main()
{
FILE *fin=fopen("plantatie.in","r"),
*fout=fopen("plantatie.out","w");
int n,m;
int i,j,k;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fscanf(fin,"%d",&a[i][j][0]);
int lim=23;
while(((1<<lim)&n)==0) lim--;
for(k=1;k<=lim;k++)
for(i=1;i<=n-(1<<k)+1;i++)
for(j=1;j<=n-(1<<k)+1;j++)
a[i][j][k]=minim(minim(a[i][j][k-1],a[i+(1<<(k-1))][j][k-1]),
minim(a[i][j+(1<<(k-1))][k-1],a[i+(1<<(k-1))][j+(1<<(k-1))][k-1]));
int x,z;
for(x=1;x<=m;x++)
{
fscanf(fin,"%d%d%d",&i,&j,&k);
lim=23;
while((k&(1<<lim))==0) lim--;
z=minim(minim(a[i][j][lim],a[i+k-(1<<lim)][j][lim]),
minim(a[i][j+k-(1<<lim)][lim],a[i+k-(1<<lim)][j+k-(1<<lim)][lim]));
fprintf(fout,"%d\n",z);
}
fclose(fin);
fclose(fout);
return 0;
}