Cod sursa(job #1811315)

Utilizator patrutoiuandreipatrutoiu andrei patrutoiuandrei Data 21 noiembrie 2016 09:21:01
Problema Struti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>

using namespace std;
ifstream fin("struti.in");
ofstream fout("struti.out");
int
void deque_line(int d,bool OK)
{
    int i,j;
    for(i=1;i<=N;i++)
    {
        int st=1,dr=1;
        DQ[i][0] = DQ[i][1] = 0;
        for(j=1;j<=M;j++)
        {
            if(DQ[i][dr]-DQ[i][st] + 1 > d)
                st++;
            if(OK==1)
                while(dr>=st && A[i][j]>A[i][DQ[i][dr]])
                    dr--;
            else
                while(dr>=st && A[i][j]<A[i][DQ[i][dr]])
                    dr--;
            DQ[i][++dr] = j;
        }
    }
}
void deque_col(int d,int OK)
{
    int i,j;
    for(j=1;j<=M;j++)
    {
        int st=1,dr=1;
        DQ2[OK][1][j] = DQ2[OK][0][j] = 0;
        for(i=1;i<=N;i++)
        {
            if(DQ[OK][dr][j]-DQ2[OK][st][j] + 1 > d)
                st++;
            if(OK==1)
                while(dr>=st && DQ[i][j] > DQ[DQ2[OK][dr][j]][j])
                    dr--;
            else
                while(dr>=st && DQ[i][j] < DQ[DQ2[OK][dr][j]][j])
                    dr--;
            DQ2[OK][++dr][j] = i;
        }
    }
}
int main()
{
    fin>>N>>M>>P;
    for(i=1;i<=N;i++)
        for(j=1;j<=M;j++)
            fin>>A[i][j];

    while(P--)
    {
        fin>>DX>>DY;
        deque_line(DX,1);
        deque_col(DY,1);
        deque_line(DX,0);
        deque_col(DY,0);
    }
    return 0;
}