CCCPaste

dreptunghi1

///Usor (bine mediu..)
#include 
#include 
using namespace std;
ifstream cin("dreptunghi1.in");
ofstream cout("dreptunghi1.out");
const int mxN = 1e4;
pair p[mxN+2];
int st[mxN+1],l[mxN+1],r[mxN+1],v[mxN+1];
int skyline(int v[], int n)
{
    int top = 0, sol = 0;
    for(int i = 1;i<=n;i++)
        l[i] = r[i] = 0;
    for(int i = 1;i<=n;i++)
    {
        while(top > 0 && v[st[top]] > v[i])
            r[st[top]] = i , top--;
        st[++top] = i;
    }
    while(top>0) r[st[top]] = n+1, top--;
    for(int i = n;i>0;i--)
    {
        while(top > 0 && v[st[top]] > v[i])
            l[st[top]] = i, top--;
        st[++top] = i;
    }
    for(int i = 1;i<=n;i++)
    {
       int res = v[i] * (r[i] - l[i] - 1);
       sol = max(sol,res);
    }
    return sol;
}
int main()
{
    int n , m , z;
    cin>>n>>m>>z;
    for(int i = 1;i<=z;i++)
        cin>>p[i].first>>p[i].second;
    sort(p+1,p+1+z);
    p[z+1].first = p[z+1].second = 1e9;
    int k = 1, sol = 0;
    for(int i = 1;i<=n;i++)
    {
        for(int j = 1;j<=m;j++)
        {
            if(i >= p[k].first)
            {
                while(i>p[k].first) k++;

                while(j > p[k].second && p[k].first <= i) k++;
            }

            if(i==p[k].first&&j==p[k].second) v[j] = 0;
            else v[j]++;
        }
        sol = max(sol,skyline(v,m));
    }
    cout<