제출 #248858

#제출 시각아이디문제언어결과실행 시간메모리
248858Autoratch수열 (APIO14_sequence)C++14
71 / 100
121 ms131076 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 1; const int K = 201; int n,k; long long s[N]; pair<long long,int> dp[N][K]; vector<long long> m,b,id; bool bad(int l1,int l2,int l3) { return (double)(b[l2]-b[l3])*(m[l2]-m[l1])<(double)(b[l1]-b[l2])*(m[l3]-m[l2]); } void add(long long mx,long long bx,long long idx) { if(!m.empty() and m.back()==mx and b.back()==bx) return; m.push_back(mx),b.push_back(bx),id.push_back(idx); while(m.size()>2 and bad(m.size()-3,m.size()-2,m.size()-1)) m.erase(m.end()-2),b.erase(b.end()-2),id.erase(id.end()-2); } int ptr; pair<long long,int> query(long long x) { if(m.empty()) return {0,0}; if(ptr>=m.size()) ptr = m.size()-1; while(ptr<m.size()-1 and m[ptr+1]*x+b[ptr+1]>=m[ptr]*x+b[ptr]) ptr++; return {m[ptr]*x+b[ptr],id[ptr]}; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k; for(int i = 1;i <= n;i++) cin >> s[i],s[i]+=s[i-1]; int now = 1,prev = 0; for(int j = 0;j <= k;j++) { m.clear(),b.clear(),id.clear(); ptr = 0; for(int i = 1;i <= n;i++) { if(j) dp[i][j] = query(s[i]); if(i!=n and !((j-1)>1 and !dp[i][j-1].second) and j-1<i) add(s[i],dp[i][j-1].first-s[i]*s[i],i); } } cout << dp[n][k].first << '\n'; vector<int> ans; int l = k; for(int x = dp[n][k].second;x;x = dp[x][--l].second) ans.push_back(x); reverse(ans.begin(),ans.end()); for(int x : ans) cout << x << ' '; }

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

sequence.cpp: In function 'std::pair<long long int, int> query(long long int)':
sequence.cpp:30:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(ptr>=m.size()) ptr = m.size()-1;
        ~~~^~~~~~~~~~
sequence.cpp:31:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(ptr<m.size()-1 and m[ptr+1]*x+b[ptr+1]>=m[ptr]*x+b[ptr]) ptr++;
           ~~~^~~~~~~~~~~
sequence.cpp: In function 'int main()':
sequence.cpp:41:9: warning: unused variable 'now' [-Wunused-variable]
     int now = 1,prev = 0;
         ^~~
sequence.cpp:41:17: warning: unused variable 'prev' [-Wunused-variable]
     int now = 1,prev = 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...