Pagini recente » Cod sursa (job #1739496) | Cod sursa (job #2772546) | Cod sursa (job #239523) | Cod sursa (job #68739) | Cod sursa (job #2428578)
#include <bits/stdc++.h>
#define maxim 501
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int dp[maxim][maxim][10]; /// incepe pe linia i, coloana j, de latura 1<<k
int n,m;
int main()
{
f>>n>>m;
int x;
for (int i=1;i<=n; i++ )
for (int j=1;j<=n;j++)
f>>dp[i][j][0];
for (int i= n ;i>=1 ;i--)
for (int j=n ; j >=1 ;j--)
for (int k=1; i+(1<<k)-1<= n && j+(1<<k)-1<=n ; k++ )
{
int pow=1<<(k-1);
dp[i][j][k]=max(dp[i][j][k-1], dp[i][j+pow][k-1]); // patrate de sus
dp[i][j][k]=max(dp[i][j][k],dp[i+pow][j][k-1]); //patrate de jos
dp[i][j][k]=max(dp[i][j][k], dp[i+pow][j+pow][k-1]);
}
int i,j,k;
while (m--)
{
f>>i>>j>>k;
int ans;
int lg=(int)log2(k);
int dif=k-(1<<lg);
ans=max(dp[i][j][lg],dp[i][j+dif][lg]);
ans=max(ans,dp[i+dif][j][lg]);
ans=max(ans,dp[i+dif][j+dif][lg]);
g<<ans<<'\n';
}
}