Submission #431685

#TimeUsernameProblemLanguageResultExecution timeMemory
431685MDario자리 배치 (IOI18_seats)C++11
17 / 100
4038 ms44032 KiB
#include "seats.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> r, c, rmi, rma, cmi, cma, v;
int s=0, n;
void give_initial_chart(int H, int W, vector<int> R, vector<int> C) {
    r=R;
    rmi=R;
    rma=R;
    c=C;
    cmi=C;
    cma=C;
    n=H*W;
    s=1;
    v.push_back(1);
    for(int i=1; i<n; i++){
        rmi[i]=min(r[i], rmi[i-1]);
        rma[i]=max(r[i], rma[i-1]);
        cmi[i]=min(c[i], cmi[i-1]);
        cma[i]=max(c[i], cma[i-1]);
        if((rma[i]-rmi[i]+1)*(cma[i]-cmi[i]+1)==i+1){
            s++;
            v.push_back(1);
        }
        else v.push_back(0);
    }
    return;
}

int swap_seats(int a, int b) {
    if(a>b)swap(a, b);
    swap(r[a], r[b]);
    swap(c[b], c[a]);
    a+=(a==0);
    rmi[0]=r[0];
    rma[0]=r[0];
    cmi[0]=c[0];
    cma[0]=c[0];
    for(int i=a; i<b; i++){
        s-=v[i];
        rmi[i]=min(r[i], rmi[i-1]);
        rma[i]=max(r[i], rma[i-1]);
        cmi[i]=min(c[i], cmi[i-1]);
        cma[i]=max(c[i], cma[i-1]);
        if((rma[i]-rmi[i]+1)*(cma[i]-cmi[i]+1)==i+1){
            s++;
            v[i]=1;
        }
        else v[i]=0;
    }
    return s;
}
#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...