제출 #1347897

#제출 시각아이디문제언어결과실행 시간메모리
1347897feyza삶의 질 (IOI10_quality)C++20
60 / 100
5094 ms27984 KiB
#include <bits/stdc++.h>
#include "quality.h"

using namespace std;

const int maxn=3005;
int n,m,h,w;
int a[maxn][maxn];
set<int>s;

inline void rem_x(int x,int start,int finish)
{
    for(int j=start;j<=finish;j++)
        s.erase(s.find(a[x][j]));
}

inline void add_x(int x,int start,int finish)
{
    for(int j=start;j<=finish;j++)
        s.insert(a[x][j]);
}

inline void rem_y(int y,int start,int finish)
{
    for(int i=start;i<=finish;i++)
        s.erase(s.find(a[i][y]));
}

inline void add_y(int y,int start,int finish)
{
    for(int i=start;i<=finish;i++)
        s.insert(a[i][y]);
}

int median()
{
    int sz=s.size();

    /*for(int i : s)
        cout<<i<<' ';
    cout<<endl;*/

    auto it=next(s.begin(),sz/2);
    int ret=*(it);

    //cout<<ret<<endl;

    return ret;
}

int rectangle(int R, int C, int H, int W, int Q[3001][3001])
{
    n=R; m=C; h=H; w=W;

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
            a[i][j] = Q[i][j];
    }

    for(int i=0;i<h-1;i++)
    {
        for(int j=0;j<w;j++)
            s.insert(a[i][j]);
    }

    int ans=n*m;
    for(int i=0;i+h-1<n;i++)
    {
        if(i%2==0)
            add_x(i+h-1,0,w-1);
        else
            add_x(i+h-1,m-w,m-1);

        ans=min(ans,median());

        if(i%2==0)
        {
            rem_y(0,i,i+h-1);

            for(int j=w;j<m;j++)
            {
                add_y(j,i,i+h-1);

                ans=min(ans,median());

                rem_y(j-w+1,i,i+h-1);
            }
        }
        else
        {
            rem_y(m-1,i,i+h-1);

            for(int j=m-w-1;j>=0;j--)
            {
                add_y(j,i,i+h-1);

                ans=min(ans,median());

                rem_y(j+w-1,i,i+h-1);
            }
        }

        if(i%2==0)
            add_y(m-w,i,i+h-1);
        else
            add_y(w-1,i,i+h-1);

        if(i%2==0)
            rem_x(i,m-w,m-1);
        else
            rem_x(i,0,w-1);
    }

    return ans;
}
#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...