Submission #2600955


Source Code Expand

#include <algorithm>
#include <cassert>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <string>
#include <utility>
#include <vector>

const int DEBUG = 0;

#define REP(i,s,n) for(int i=(int)(s);i<(int)(n);i++)
#define DEBUGP(val) cerr << #val << "=" << val << "\n"

using namespace std;
typedef long long int ll;
typedef vector<int> VI;
typedef vector<ll> VL;
typedef pair<int, int> PI;

map<ll, int> tbl;
ll intv = 0;
ll sz = 0;
ll d;
void add(ll day) {
  if (tbl.count(day) != 0 && tbl[day] > 0) {
    tbl[day]++;
    return;
  }
  auto miit = tbl.upper_bound(day - 1);
  auto mait = tbl.lower_bound(day + 1);
  ll mi = -1e18;
  ll ma = 1e18;
  if (miit != tbl.begin()) {
    miit--;
    mi = miit->first;
  }
  if (mait != tbl.end()) {
    ma = mait->first;
  }
  tbl[day] = 1;
  sz++;
  assert (mi < day);
  assert (ma > day);
  if (DEBUG) {
    DEBUGP(day);
    DEBUGP(mi);
    DEBUGP(ma);
  }
  if (ma - mi - 1 <= d) {
    intv--;
    return;
  }
  if (day - mi - 1 <= d) intv += day - mi - 1;
  if (ma - day - 1 <= d) intv += ma - day - 1;
}

void erase(ll day) {
  assert (tbl.count(day) > 0);
  if (tbl[day] >= 2) {
    tbl[day]--;
    return;
  }
  auto miit = tbl.upper_bound(day - 1);
  auto mait = tbl.lower_bound(day + 1);
  ll mi = -1e18;
  ll ma = 1e18;
  if (miit != tbl.begin()) {
    miit--;
    mi = miit->first;
  }
  if (mait != tbl.end() && mait->first > day) {
    ma = mait->first;
  }
  tbl[day] = 0;
  tbl.erase(day);
  sz--;
  assert (mi < day);
  assert (ma > day);
  if (DEBUG) {
    DEBUGP(-day);
    DEBUGP(mi);
    DEBUGP(ma);
  }
  if (ma - mi - 1 <= d) {
    intv++;
    return;
  }
  if (day - mi - 1 <= d) intv -= day - mi - 1;
  if (ma - day - 1 <= d) intv -= ma - day - 1;
}

void debug(void) {
  if (DEBUG) {
    cerr << "data:" << endl;
    DEBUGP(sz);
    DEBUGP(intv);
    for (auto e: tbl) {
      if (e.second > 0) {
        cerr << e.first << " " << e.second << endl;
      }
    }
  }
}


int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  ll y, w, n, m;
  cin >> y >> w >> n >> m >> d;
  VL a(n);
  REP(i, 0, n) {
    cin >> a[i];
    a[i]--;
  }
  VL b(m), c(m);
  vector<VL> sigma(w);
  REP(i, 0, m) {
    cin >> b[i] >> c[i];
    b[i]--;
    c[i]--;
    sigma[c[i]].push_back(b[i]);
  }
  // insert all
  REP(i, 0, n) add(a[i]);
  REP(i, 0, m) {
    ll day = b[i] * w + c[i];
    add(day);
  }
  REP(i, 0, w) {
    if (DEBUG) DEBUGP(i);
    debug();
    cout << sz + intv << endl;
    // TODO a
    REP(j, 0, n) {
      erase(a[j] + i);
      add(a[j] + i + 1);
    }
    for (ll b: sigma[i]) {
      erase(b * w + i);
      add(b * w + i + w);
    }
  }
}

Submission Info

Submission Time
Task E - 祝日
User kobae964
Language C++14 (GCC 5.4.1)
Score 700
Code Size 2850 Byte
Status AC
Exec Time 3554 ms
Memory 15744 KB

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 600 / 600 100 / 100
Status
AC × 4
AC × 22
AC × 56
Set Name Test Cases
Sample sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt
Subtask1 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, sample-01.txt, sample-02.txt
All 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, 02-24.txt, 02-25.txt, 02-26.txt, 02-27.txt, 02-28.txt, 02-29.txt, 02-30.txt, 02-31.txt, 02-32.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt
Case Name Status Exec Time Memory
01-01.txt AC 409 ms 13952 KB
01-02.txt AC 328 ms 12160 KB
01-03.txt AC 192 ms 9600 KB
01-04.txt AC 62 ms 3456 KB
01-05.txt AC 235 ms 9728 KB
01-06.txt AC 219 ms 9088 KB
01-07.txt AC 210 ms 8904 KB
01-08.txt AC 64 ms 3456 KB
01-09.txt AC 334 ms 11776 KB
01-10.txt AC 49 ms 2816 KB
01-11.txt AC 260 ms 12160 KB
01-12.txt AC 231 ms 11136 KB
01-13.txt AC 323 ms 12672 KB
01-14.txt AC 93 ms 5120 KB
01-15.txt AC 265 ms 10368 KB
01-16.txt AC 56 ms 1152 KB
01-17.txt AC 48 ms 2944 KB
01-18.txt AC 234 ms 9088 KB
01-19.txt AC 387 ms 13952 KB
01-20.txt AC 351 ms 12544 KB
02-01.txt AC 2462 ms 13952 KB
02-02.txt AC 839 ms 10368 KB
02-03.txt AC 1093 ms 12800 KB
02-04.txt AC 1687 ms 13184 KB
02-05.txt AC 2228 ms 15744 KB
02-06.txt AC 1274 ms 11136 KB
02-07.txt AC 210 ms 8924 KB
02-08.txt AC 289 ms 1792 KB
02-09.txt AC 2470 ms 12800 KB
02-10.txt AC 156 ms 2432 KB
02-11.txt AC 2427 ms 13184 KB
02-12.txt AC 662 ms 10624 KB
02-13.txt AC 986 ms 10240 KB
02-14.txt AC 178 ms 1792 KB
02-15.txt AC 639 ms 10112 KB
02-16.txt AC 56 ms 384 KB
02-17.txt AC 77 ms 2944 KB
02-18.txt AC 299 ms 9088 KB
02-19.txt AC 2382 ms 13952 KB
02-20.txt AC 206 ms 8820 KB
02-21.txt AC 580 ms 2304 KB
02-22.txt AC 2 ms 256 KB
02-23.txt AC 3554 ms 14336 KB
02-24.txt AC 1933 ms 11136 KB
02-25.txt AC 1637 ms 12544 KB
02-26.txt AC 3 ms 256 KB
02-27.txt AC 140 ms 640 KB
02-28.txt AC 658 ms 1664 KB
02-29.txt AC 198 ms 8832 KB
02-30.txt AC 203 ms 8960 KB
02-31.txt AC 202 ms 8960 KB
02-32.txt AC 339 ms 1280 KB
sample-01.txt AC 1 ms 256 KB
sample-02.txt AC 1 ms 256 KB
sample-03.txt AC 1 ms 256 KB
sample-04.txt AC 1 ms 256 KB