結果
問題 | No.59 鉄道の旅 |
ユーザー |
![]() |
提出日時 | 2017-06-05 00:24:35 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 39 ms / 5,000 ms |
コード長 | 928 bytes |
コンパイル時間 | 704 ms |
コンパイル使用メモリ | 63,004 KB |
実行使用メモリ | 7,560 KB |
最終ジャッジ日時 | 2024-09-22 06:05:07 |
合計ジャッジ時間 | 1,773 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 12 |
ソースコード
#include<iostream>#include<vector>#include<string>using namespace std;#define FOR(k,m,n) for(int (k)=(m);(k)<(n);(k)++)#define rep(i,n) FOR((i),0,(n))typedef long long ll;const int INF=1e9+7;class BIT{public:vector<int> bit;int n;//1-indexedBIT(){init();}BIT(int n):n(n){init();}void init(){bit.clear();bit.resize(n+1,0);}int sum(int i){int s=0;while(i>0){s+=bit[i];i-=i&-i;}return s;}void add(int i,int x){while(i<=n){bit[i]+=x;i+=i&-i;}}int sum0(int i){return sum(i+1);}void add0(int i,int x){add(i+1,x);}};const int MAX_N=1e5+5;const int MAX_W=1e6+6;int w[MAX_N];int main(){int n,k;cin>>n>>k;rep(i,n){cin>>w[i];}BIT bit(MAX_W);rep(i,n){if(w[i]>0 && bit.sum(MAX_W)-bit.sum(w[i]-1)<k){bit.add(w[i],1);}else if(bit.sum(-1*w[i])-bit.sum(-1*w[i]-1)>0)bit.add(-1*w[i],-1);}cout<<bit.sum(MAX_W)<<endl;}