結果
| 問題 |
No.919 You Are A Project Manager
|
| コンテスト | |
| ユーザー |
kmjp
|
| 提出日時 | 2019-10-26 01:45:07 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,391 bytes |
| コンパイル時間 | 2,057 ms |
| コンパイル使用メモリ | 191,776 KB |
| 実行使用メモリ | 18,408 KB |
| 最終ジャッジ日時 | 2024-09-13 13:00:50 |
| 合計ジャッジ時間 | 23,030 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 1 |
| other | AC * 51 WA * 4 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef signed long long ll;
#undef _P
#define _P(...) (void)printf(__VA_ARGS__)
#define FOR(x,to) for(x=0;x<(to);x++)
#define FORR(x,arr) for(auto& x:arr)
#define ITR(x,c) for(__typeof(c.begin()) x=c.begin();x!=c.end();x++)
#define ALL(a) (a.begin()),(a.end())
#define ZERO(a) memset(a,0,sizeof(a))
#define MINUS(a) memset(a,0xff,sizeof(a))
//-------------------------------------------------------
int N;
int A[10101];
map<int,int> T[101010];
vector<pair<int,int>> E[101];
multiset<int> X,Y;
void add(int v) {
X.insert(v);
Y.insert(*X.rbegin());
X.erase(X.find(*X.rbegin()));
X.insert(*Y.begin());
Y.erase(Y.begin());
if(X.size()>Y.size()+1) {
Y.insert(*X.rbegin());
X.erase(X.find(*X.rbegin()));
}
}
void del(int v) {
if(X.count(v)) {
X.erase(X.find(v));
if(X.size()<Y.size()) {
X.insert(*Y.begin());
Y.erase(Y.begin());
}
}
else {
Y.erase(Y.find(v));
if(X.size()>Y.size()+1) {
Y.insert(*X.rbegin());
X.erase(X.find(*X.rbegin()));
}
}
}
void solve() {
int i,j,k,l,r,x,y; string s;
cin>>N;
FOR(i,N) cin>>A[i];
for(l=1;l<=N;l++) {
for(x=0;x+l<=N;x+=l) E[x/100].push_back({x+l,x});
for(x=N-l;x>=0;x-=l) E[x/100].push_back({x+l,x});
}
FOR(i,100) {
sort(ALL(E[i]));
int L=i*100,R=i*100;
X.clear(),Y.clear();
FORR(e,E[i]) {
while(e.second<L) add(A[--L]);
while(R<e.first) add(A[R++]);
while(L<e.second) del(A[L++]);
while(e.first<R) del(A[--R]);
assert(X.size()==Y.size() || X.size()==Y.size()+1);
T[e.second][e.first]=*X.rbegin();
}
}
//FOR(i,N) FORR(t,T[i]) cout<<i<<" "<<t.first<<" "<<t.second<<endl;
ll ret=0;
for(l=1;l<=N;l++) {
vector<ll> R;
R.push_back(0);
ll sum=0,ma=0;
for(x=N-l;x>=0;x-=l) {
sum+=T[x][x+l];
ma=max(ma,sum);
R.push_back(ma);
}
/*
cout<<l<<" ";
FORR(r,R) cout<<r<<" ";
cout<<endl;
*/
ret=max(ret,l*R.back());
sum=0;
for(x=0;x+l<=N;x+=l) {
sum+=T[x][x+l];
if(N%l) {
ret=max(ret,l*(sum+R[R.size()-1-x/l]));
}
else {
ret=max(ret,l*(sum+R[R.size()-2-x/l]));
}
//cout<<"!"<<x/l<<" "<<sum<<" "<<R[R.size()-1-x/l]<<endl;
}
}
cout<<ret<<endl;
}
int main(int argc,char** argv){
string s;int i;
if(argc==1) ios::sync_with_stdio(false), cin.tie(0);
FOR(i,argc-1) s+=argv[i+1],s+='\n'; FOR(i,s.size()) ungetc(s[s.size()-1-i],stdin);
cout.tie(0); solve(); return 0;
}
kmjp