제출 #1321034

#제출 시각아이디문제언어결과실행 시간메모리
1321034husseinjuandaRabbit Carrot (LMIO19_triusis)C++20
100 / 100
129 ms9940 KiB
#include <bits/stdc++.h> using namespace std; #define int long long vector<int> id; vector<int> t; void update(int i, int l, int r, int i1, int v1){ if(l == r){ t[i] = min(t[i], v1); return; } int mid = (l+r)/2; if(i1 <= mid){ update(i*2, l, mid, i1, v1); }else{ update(i*2+1, mid+1, r, i1, v1); } t[i] = min(t[i*2], t[i*2+1]); } int query(int i, int l, int r, int l1, int r1){ if(l1 > r || l > r1) return 1e18; if(l1 <= l && r1 >= r){ return t[i]; } int mid = (l+r)/2; return min(query(i*2, l, mid, l1, r1), query(i*2+1, mid+1, r, l1, r1)); } int get_id(int k){ auto it = lower_bound(id.begin(), id.end(), k); return it-id.begin(); } signed main(){ ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<int> x(n); for(int i = 0; i < n; i++){ cin >> x[i]; id.push_back(x[i] + (n-i-1) * m); } id.push_back(n * m); sort(id.begin(), id.end()); t.resize(id.size()*4, 1e18); update(1, 0, id.size()-1, get_id(n*m), 0); int add = 0; for(int i = 0; i < n; i++){ add++; auto it = lower_bound(id.begin(), id.end(), x[i] + (n-i-1) * m); int j = it - id.begin(); int mn = query(1, 0, id.size()-1, j, id.size()-1); update(1, 0, id.size()-1, get_id(x[i] + (n-i-1) * m), mn-1); } cout << t[1]+add << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...