結果
問題 | No.59 鉄道の旅 |
ユーザー |
![]() |
提出日時 | 2014-11-13 17:36:23 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 37 ms / 5,000 ms |
コード長 | 1,348 bytes |
コンパイル時間 | 654 ms |
コンパイル使用メモリ | 85,580 KB |
実行使用メモリ | 7,808 KB |
最終ジャッジ日時 | 2024-12-24 20:28:27 |
合計ジャッジ時間 | 1,464 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 12 |
ソースコード
#include <vector>#include <list>#include <map>#include <set>#include <deque>#include <stack>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include <sstream>#include <iostream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <cctype>#include <string>#include <cstring>#include <ctime>using namespace std;#define INF 1000000000#define EPS 1e-9#define PI acos(-1)typedef long long ll;typedef pair<int, int> P;#define MAX_N 1000000#define MAX_K 1000000int N, K;int W[MAX_N];//BITの実装//[l, n]int bit[MAX_N+1], n = MAX_N;//i番目までの合計値int sum(int i){int s = 0;while(i > 0){s += bit[i];i -= i & -i;}return s;}//i番目の値をxだけ増やすvoid add(int i, int x){while(i <= n){bit[i] += x;i += i & -i;}}int main(){cin >> N >> K;for(int i = 0; i < N; i++){cin >> W[i];}for(int i = 0; i < N; i++){if(W[i] > 0){int tmp = sum(MAX_N) - sum(W[i]-1);if(tmp < K){add(W[i], 1);}}else if(W[i] < 0){int w = abs(W[i]);if(sum(w) - sum(w-1) > 0){add(w, -1);}}}cout << sum(MAX_N) << endl;return 0;}