Pagini recente » Cod sursa (job #2224204) | Cod sursa (job #1558117) | Cod sursa (job #2524028) | Cod sursa (job #1410874) | Cod sursa (job #2717465)
#include <bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
#define int long long
const int Max = 501;
void nos()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
}
int n,q;
int a[Max][Max];
void read()
{
f>>n>>q;
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}
int tree[Max][4*Max];
void create_tree(int tree[], int a[], int where, int left, int right)
{
if(left == right)
{
tree[where] = a[left];
return;
}
int mid = (left + right) / 2;
create_tree(tree,a,2*where,left,mid);
create_tree(tree,a,2*where+1,mid+1,right);
tree[where] = max(tree[2*where],tree[2*where+1]);
}
int left_limit;
int right_limit;
int ans;
void query(int tree[], int where, int left, int right)
{
if(left_limit <= left and right <= right_limit)
{
ans = max(ans,tree[where]);
return;
}
int mid = (left + right) / 2;
if(left_limit <= mid)query(tree,2*where,left,mid);
if(mid + 1 <= right_limit)query(tree,2*where+1,mid+1,right);
}
void solve()
{
int i;
for(i=1;i<=n;i++)
create_tree(tree[i],a[i],1,1,n);
for(i=1;i<=q;i++)
{
int xs,ys,dim;
f>>xs>>ys>>dim;
ans = 0;
left_limit = ys;
right_limit = ys + dim - 1;
int j;
for(j = xs;j<=xs+dim-1;j++)
query(tree[j],1,1,n);
g<<ans<<'\n';
}
}
void restart()
{
}
int32_t main()
{
nos();
read();
solve();
restart();
return 0;
}