/* -*- coding: utf-8 -*- * * 59.cc: No.59 鉄道の旅 - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 100000; const int MAX_W = 1000000; /* typedef */ template struct BIT { int n; T bits[MAX_N + 1]; BIT() {} BIT(int _n) { init(_n); } void init(int _n) { n = _n; memset(bits, 0, sizeof(bits)); } T sum(int x) { T s = 0; while (x > 0) { s += bits[x]; x -= (x & -x); } return s; } void add(int x, T v) { while (x <= n) { bits[x] += v; x += (x & -x); } } }; /* global variables */ int wis[MAX_N]; BIT bit; /* subroutines */ /* main */ int main() { int n, k; cin >> n >> k; int maxw = 0; for (int i = 0; i < n; i++) { cin >> wis[i]; if (maxw < wis[i]) maxw = wis[i]; } bit.init(maxw); int wn = 0; for (int i = 0; i < n; i++) { int wi = wis[i]; if (wi > 0) { // load int c = wn - bit.sum(wi - 1); if (c < k) { bit.add(wi, 1); wn++; //printf("%d: %d loaded: c=%d, k=%d\n", i, wi, c, k); //for (int j = 1; j <= maxw; j++) printf("%d ", bit.sum(j)); //putchar('\n'); } //else //printf("%d: %d not loaded: c=%d\n", i, wi, c); } else { // unload wi = -wi; int c = bit.sum(wi) - bit.sum(wi - 1); if (c > 0) { bit.add(wi, -1); wn--; //printf("%d: %d unloaded\n", i, wi); } //else //printf("%d: %d not unloaded: c=%d\n", i, wi, c); } } printf("%d\n", wn); return 0; }