Submission #284373

#TimeUsernameProblemLanguageResultExecution timeMemory
284373MKopchev자리 배치 (IOI18_seats)C++14
17 / 100
4074 ms57468 KiB
#include "seats.h"
#include<bits/stdc++.h>
using namespace std;

const int nmax=1e6+42;

vector< vector<int> > inp;

int n,m;

int min_x[nmax],min_y[nmax],max_x[nmax],max_y[nmax];

bool is[nmax];

int ret;

pair<int,int> where[nmax];

void eval(int from,int to)
{
    for(int i=from;i<=to;i++)
    {
        ret=ret-is[i];

        if(i==0)
        {
            min_x[i]=where[i].first;
            max_x[i]=where[i].first;

            min_y[i]=where[i].second;
            max_y[i]=where[i].second;
        }
        else
        {
            min_x[i]=min(min_x[i-1],where[i].first);
            max_x[i]=max(max_x[i-1],where[i].first);

            min_y[i]=min(min_y[i-1],where[i].second);
            max_y[i]=max(max_y[i-1],where[i].second);
        }

        if(i+1==(max_x[i]-min_x[i]+1)*(max_y[i]-min_y[i]+1))is[i]=1;
        else is[i]=0;

        ret=ret+is[i];
    }
}
void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C)
{
    n=H;
    m=W;

    for(int i=0;i<H*W;i++)
    {
        where[i]={R[i],C[i]};
    }

    eval(0,H*W-1);
}

int swap_seats(int a, int b)
{
    swap(where[a],where[b]);

    eval(min(a,b),max(a,b));

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