Submission #891259

#TimeUsernameProblemLanguageResultExecution timeMemory
891259vjudge1Seats (IOI18_seats)C++17
17 / 100
4080 ms56488 KiB
#include "seats.h"
#include <bits/stdc++.h>

using namespace std;

using vi = vector<int>;

struct AINT {
    int n;
    vi mi, ma;
    AINT(int N) : n(N), mi(4 * N), ma(4 * N) {} 
};

vi r, c;
vi mir, mic;
vi mar, mac;

int reg = 0;

void give_initial_chart(int H, int W, vi R, vi C) {
    r = mir = mar = R;
    c = mac = mic = C;
    reg = 1;
    for(int i = 1; i < H * W; ++i) {
        mar[i] = max(mar[i], mar[i - 1]);
        mac[i] = max(mac[i], mac[i - 1]);
        mir[i] = min(mir[i], mir[i - 1]);
        mic[i] = min(mic[i], mic[i - 1]);

        reg += (i + 1) == ((mac[i] - mic[i] + 1) * (mar[i] - mir[i] + 1));
    }
}

int swap_seats(int a, int b) {
    if(a > b) swap(a, b);
    swap(r[a], r[b]);
    swap(c[a], c[b]);
    for(int i = a; i <= b; ++i)  {
        reg -= (i + 1) == ((mac[i] - mic[i] + 1) * (mar[i] - mir[i] + 1));
        mir[i] = mar[i] = r[i];
        mic[i] = mac[i] = c[i];
    }
    for(int i = a; i <= b; ++i)  {
        if(i) {
            mar[i] = max(mar[i], mar[i - 1]);
            mac[i] = max(mac[i], mac[i - 1]);
            mir[i] = min(mir[i], mir[i - 1]);
            mic[i] = min(mic[i], mic[i - 1]);
        }
        reg += (i + 1) == ((mac[i] - mic[i] + 1) * (mar[i] - mir[i] + 1));
    }
    return reg;
}
#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...