Pagini recente » Cod sursa (job #1350494) | Cod sursa (job #393306) | Cod sursa (job #1049589) | Cod sursa (job #1163235) | Cod sursa (job #2031591)
#include<bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,q,nr,pos;
int ox,oy,l;
int arbint[502][3002];
int max1,start,finish;
int maxim(int a, int b)
{
if(a>b)
return a;
return b;
}
void update(int l, int nod, int st, int sf)
{
if(st==sf){
arbint[l][nod]=nr;
return;
}
int m=(st+sf)/2;
if(pos<=m)
update(l,2*nod,st,m);
else
update(l,2*nod+1,m+1,sf);
arbint[l][nod]=maxim(arbint[l][2*nod],arbint[l][2*nod+1]);
}
void query(int l,int nod,int st,int dr)
{
if(start<=st && dr<=finish)
{
if(max1<arbint[l][nod])
max1=arbint[l][nod];
return;
}
int mij=(st+dr)/2;
if(start<=mij)
query(l,2*nod,st,mij);
if(mij<finish)
query(l,2*nod+1,mij+1,dr);
}
int main()
{
f>>n>>q;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j){
f>>nr;
pos=j;
update(i,1,1,n);
}
for(;q;--q)
{
f>>ox>>oy>>l;
int mx=0;
for(int i=ox;i<ox+l;++i)
{
max1=-1;
start=oy;
finish=oy+l-1;
query(i,1,1,n);
mx=max(mx,max1);
}
g<<mx<<'\n';
}
return 0;
}