結果
| 問題 |
No.919 You Are A Project Manager
|
| コンテスト | |
| ユーザー |
machy
|
| 提出日時 | 2019-10-25 22:08:18 |
| 言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,534 bytes |
| コンパイル時間 | 978 ms |
| コンパイル使用メモリ | 132,336 KB |
| 実行使用メモリ | 10,496 KB |
| 最終ジャッジ日時 | 2024-11-30 15:32:33 |
| 合計ジャッジ時間 | 82,589 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 47 TLE * 8 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long LL;
LL getMedian(vector<LL>& a, LL begin, LL end){
sort(a.begin() + begin, a.begin() + end);
return *(a.begin() + (begin + end - 1) / 2);
}
void build(vector<LL>& a, LL n, LL k, vector<LL>& left, vector<LL>& left_cum){
for(LL i = 0; (i+1)*k <= n; ++i){
left[i] = getMedian(a, i*k, (i+1)*k);
}
LL cur = 0;
for(LL i = 0; i < left.size(); ++i){
cur += left[i];
left_cum[i+1] = max(cur, left_cum[i]);
}
}
LL solve(vector<LL> a, LL n, LL k){
vector<LL> b = a;
reverse(b.begin(), b.end());
vector<LL> left(n / k);
vector<LL> right(n / k);
vector<LL> left_cum(n / k + 1);
vector<LL> right_cum(n / k + 1);
build(a, n, k, left, left_cum);
build(b, n, k, right, right_cum);
LL ans = 0;
for(LL i = 0; i < left_cum.size(); ++i){
ans = max(ans, left_cum[i] + right_cum[right_cum.size()-1-i]);
}
/*
cerr << "k=" << k << endl;
for(LL i = 0; i < left_cum.size(); ++i){
cerr << "left " << left_cum[i] << endl;
}
for(LL i = 0; i < left_cum.size(); ++i){
cerr << "right " << right_cum[i] << endl;
}
cerr << "best=" << ans * k << endl;
*/
return ans * k;
}
int main(){
LL N;
cin >> N;
vector<LL> a(N);
for(LL i = 0; i < N; ++i){
cin >> a[i];
}
LL ans = 0;
for(LL k = 1; k <= N; ++k){
ans = max(ans, solve(a, N, k));
}
cout << ans << endl;
}
machy