Submission #848659

#TimeUsernameProblemLanguageResultExecution timeMemory
848659AndreiGarden (JOI23_garden)C++17
0 / 100
159 ms6712 KiB
#include <bits/stdc++.h>

using namespace std;

int n,m,d;

vector <int> apx(10000,-1);
vector <int> apy(10000,-1);
vector <int> cnt(510005,0);

int main()
{
    cin>>n>>m>>d;
    int cntdx=0;
    int cntdy=0;
    for(int i=1; i<=n; i++)
    {
        int p,q;
        cin>>p>>q;
        if(apx[p]==-1)
            cntdx++;
        apx[p]=apx[p+d]=p;
        if(apy[q]==-1)
            cntdy++;
        apy[q]=apy[q+d]=q;
    }
    for(int i=1; i<=m; i++)
    {
        int r,s;
        cin>>r>>s;
        if(apx[d+i]==-1)
            cntdx++;
        apx[r]=apx[r+d]=d+i;
        if(apy[d+i]==-1)
            cntdy++;
        apy[s]=apy[s+d]=d+i;
    }

    int l=-1,c=-1,ll=-1,cc=-1;
    int minim=2*d+1;

    int j=-1;
    int cntd=0;
    for(int i=0; i<d; i++)
    {
        while(j+1<2*d && cntd<cntdx)
        {
            j++;
            if(apx[j]>=0)
            {
                if(cnt[apx[j]]==0)
                    cntd++;
                cnt[apx[j]]++;
            }
        }
        if(cntd==cntdx)
        {
            if(j-i+1<minim)
            {
                minim=j-i+1;
                l=i;
                ll=j;
            }
        }
        if(apx[i]>=0)
        {
            if(cnt[apx[i]]==1)
                cntd--;
            cnt[apx[i]]--;
        }
    }

    fill(cnt.begin(),cnt.end(),0);

    minim=2*d+1;
    j=-1;
    cntd=0;
    for(int i=0; i<d; i++)
    {
        while(j+1<2*d && cntd<cntdy)
        {
            j++;
            if(apy[j]>=0)
            {
                if(cnt[apy[j]]==0)
                    cntd++;
                cnt[apy[j]]++;
            }
        }
        if(cntd==cntdy)
        {
            if(j-i+1<minim)
            {
                minim=j-i+1;
                c=i;
                cc=j;
            }
        }
        if(apy[i]>=0)
        {
            if(cnt[apy[i]]==1)
                cntd--;
            cnt[apy[i]]--;
        }
    }

    cout<<(ll-l+1)*(cc-c+1)<<"\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...