| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 249799 | eohomegrownapps | 코끼리 (Dancing Elephants) (IOI11_elephants) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "elephants.h"
#include <bits/stdc++.h>
using namespace std;
#include <bits/extc++.h>
using namespace __gnu_pbds;
template <typename T>
using pbds_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename T, typename V>
using pbds_map = tree<T, V, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
int n,l;
pbds_set<int> elephants;
vector<int> elpos;
vector<int> dp;
void init(int N, int L, int X[]) {
n=N;l=L;
elpos.resize(n);
dp.resize(n);
for (int i = 0; i<n; i++){
elpos[i]=X[i];
elephants.insert(X[i]);
}
}
int update(int i, int y) {
if (l==0){
return n;
}
int minchanged = min(elpos[i],y);
//cout<<minchanged<<'\n';
elephants.erase(elpos[i]);
elpos[i]=y;
elephants.insert(y);
auto it = elephants.lower_bound(minchanged-10*l);
if (it!=elephants.begin()){
it--;
}
if (it!=elephants.begin()){
it--;
}
auto it = elephants.begin();
int ptr = int(elephants.order_of_key(*it));
//cout<<ptr<<'\n';
while (it!=elephants.end()){
int e = *it;
//cout<<e<<'\n';
int lastel = elephants.order_of_key(e-l);
if (lastel==0){
dp[ptr]=1;
} else {
dp[ptr]=dp[lastel-1]+1;
}
ptr++;
it++;
}
return dp[n-1];
}
