// yukicoder: 59 鉄道の旅 // 2019.6.1 bal4u #include #if 1 #define gc() getchar_unlocked() #else #define gc() getchar() #endif int in() // 整数の入力(負数対応) { int n = 0, c = gc(); if (c == '-') { c = gc(); do n = 10*n + (c & 0xf), c = gc(); while (c >= '0'); return -n; } do n = 10*n + (c & 0xf), c = gc(); while (c >= '0'); return n; } #define MAXVAL 1000005 int bit[MAXVAL+5], sz, p; void init(int maxVal) { sz = maxVal; p = 1; while (p < sz) p <<= 1; } void add(int i, int x) { i++; while (i <= sz) bit[i] += x, i += i & -i; } void insert(int val) { add(val, 1); } void erase(int val) { add(val, -1); } int nth_element(int n) { int a = 0, q = p; n--; while (q >>= 1) if (a+q <= sz && bit[a+q] <= n) a += q, n -= bit[a]; return a; } int f[MAXVAL]; int main() { int N, K, w, ans; N = in(), K = in(), ans = 0; init(MAXVAL); while (N--) { w = in(); if (w > 0) { if (ans < K || nth_element(K) > MAXVAL-w) ans++, f[w]++, insert(MAXVAL-w); } else { w = -w; if (f[w] > 0) f[w]--, ans--, erase(MAXVAL-w); } } printf("%d\n", ans); return 0; }