제출 #575901

#제출 시각아이디문제언어결과실행 시간메모리
575901JovanBDischarging (NOI20_discharging)C++17
100 / 100
265 ms87540 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; const int N = 1000000; const ll INF = 1000000000000000000LL; ll a[N+5]; ll dp[N+5]; struct line{ ll k, n; ll eval(int x){ return k*x + n; } } seg[4*N+5]; ll query(int node, int l, int r, int i){ ll g = seg[node].eval(i); if(l == r) return g; int mid = (l+r)/2; if(i <= mid) return min(g, query(node*2, l, mid, i)); return min(g, query(node*2+1, mid+1, r, i)); } void upd(int node, int l, int r, line g){ int mid = (l+r)/2; if(g.eval(mid) < seg[node].eval(mid)){ swap(g, seg[node]); } if(l == r) return; if(seg[node].eval(l) > g.eval(l)) upd(node*2, l, mid, g); else upd(node*2+1, mid+1, r, g); } int main(){ ios_base::sync_with_stdio(false), cin.tie(0); cout.precision(10); cout << fixed; int n; cin >> n; for(int i=1; i<=n; i++){ cin >> a[i]; } reverse(a+1, a+1+n); for(int i=1; i<=4*n; i++) seg[i].n = INF; vector <pair <int, int>> vec; for(int i=n; i>=1; i--){ if(vec.empty() || vec.back().second < a[i]){ vec.push_back({i, a[i]}); } } reverse(vec.begin(), vec.end()); for(int i=0; i<vec.size(); i++){ int id, h; tie(id, h) = vec[i]; line g; g.k = a[id]; g.n = 0; if(i) g.n = dp[i-1]; upd(1, 1, n, g); dp[i] = query(1, 1, n, id); } cout << dp[vec.size() - 1] << "\n"; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

Discharging.cpp: In function 'int main()':
Discharging.cpp:55:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |     for(int i=0; i<vec.size(); i++){
      |                  ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...