# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
173900 | 2020-01-05T18:53:56 Z | stefdasca | Dancing Elephants (IOI11_elephants) | C++14 | 0 ms | 0 KB |
#include<bits/stdc++.h> using namespace std; int n, lg; int vals[150002], srt[150002], nw[150002]; void init(int N, int L, int X[]) { n = N; lg = L; for(int i = 1; i <= N; ++i) srt[i] = X[i-1], vals[i] = X[i-1]; sort(srt + 1, srt + n + 1); srt[n+1] = 2100000000; } int binsearch(int val) { int st = 1; int dr = n; int ans = 0; while(st <= dr) { int mid = (st + dr) / 2; if(srt[mid] <= val) ans = mid, st = mid + 1; else dr = mid - 1; } return ans; } int nw[150002]; int update(int i, int y) { ++i; if(n == 2) { vals[i] = y; if(abs(vals[1] - vals[2]) > lg) return 2; return 1; } vals[i] = y; int xx = 0; for(int i = 1; i <= n; ++i) if(srt[i] < y) nw[++xx] = srt[i]; nw[++xx] = y; for(int i = 1; i <= n; ++i) if(srt[i] > y) nw[++xx] = srt[i]; for(int i = 1; i <= n; ++i) srt[i] = nw[i]; int ans = 0; int st = 0; for(int i = 1; i <= n;) { ++ans; st = srt[i]; while(i <= n && srt[i] - st <= lg) ++i; } // for(int i = 1; i <= n; ++i) // cout << srt[i] << " "; // cout << '\n'; return ans; }