# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
211797 |
2020-03-21T09:54:10 Z |
cgiosy |
Holiday (IOI14_holiday) |
C++17 |
|
250 ms |
43776 KB |
#include <bits/stdc++.h>
#include "holiday.h"
using namespace std;
using ll=long long;
struct pst {
struct T { ll x=0; int cnt=0, l=0, r=0; };
int N, id=0, td=0;
vector<T> A;
vector<int> D, X;
pst(vector<int>&& _): N(_.size()), A(1800000), D(N+1), X(move(_)) {}
void add(int x, int s, int e, int&i) {
int p=i; i=++id;
A[i]={A[p].x+X[x], A[p].cnt+1, A[p].l, A[p].r};
if(s==e) return;
int m=s+e>>1;
if(x<=m) add(x, s, m, A[i].l);
else add(x, m+1, e, A[i].r);
}
void add(int x) { td++; add(x, 0, N-1, D[td]=D[td-1]); }
ll sum(int k, int s, int e, int i, int j) {
if(A[j].cnt-A[i].cnt<=k) return A[j].x-A[i].x;
if(s==e) return X[s]*ll(k);
int m=s+e>>1, n=A[A[j].r].cnt-A[A[i].r].cnt;
if(k<=n) return sum(k, m+1, e, A[i].r, A[j].r);
else return sum(k-n, s, m, A[i].l, A[j].l)+A[A[j].r].x-A[A[i].r].x;
}
ll sum(int l, int r, int k) {
return sum(k, 0, N-1, D[l], D[r+1]);
}
};
ll findMaxAttraction(int N, int st, int M, int A[]) {
vector<int> X(A, A+N);
sort(begin(X), end(X));
for(int i=0; i<N; i++) A[i]=lower_bound(begin(X), end(X), A[i])-begin(X);
pst t(move(X));
for(int i=0; i<N; i++) t.add(A[i]);
function<ll(int, int, int, int)> f=[&](int s, int e, int l, int r) {
if(s>e || l>r) return ll(0);
int m=s+e>>1;
pair<ll, int> n={-1, -1};
for(int i=l; i<=r; i++)
n=max(n, {t.sum(m, i, M+m-i-min(i-st, st-m)), i});
return max({n.first, f(s, m-1, l, n.second), f(m+1, e, n.second, r)});
};
return f(max(st-M, 0), st, st, min(st+M, N-1));
}
Compilation message
holiday.cpp: In member function 'void pst::add(int, int, int, int&)':
holiday.cpp:16:10: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
int m=s+e>>1;
~^~
holiday.cpp: In member function 'll pst::sum(int, int, int, int, int)':
holiday.cpp:24:10: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
int m=s+e>>1, n=A[A[j].r].cnt-A[A[i].r].cnt;
~^~
holiday.cpp: In lambda function:
holiday.cpp:40:10: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
int m=s+e>>1;
~^~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
25 ms |
42624 KB |
Output is correct |
2 |
Correct |
25 ms |
42624 KB |
Output is correct |
3 |
Correct |
25 ms |
42624 KB |
Output is correct |
4 |
Correct |
26 ms |
42624 KB |
Output is correct |
5 |
Correct |
27 ms |
42624 KB |
Output is correct |
6 |
Correct |
27 ms |
42624 KB |
Output is correct |
7 |
Correct |
26 ms |
42616 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
52 ms |
43768 KB |
Output is correct |
2 |
Correct |
54 ms |
43776 KB |
Output is correct |
3 |
Correct |
54 ms |
43768 KB |
Output is correct |
4 |
Correct |
52 ms |
43768 KB |
Output is correct |
5 |
Correct |
70 ms |
43736 KB |
Output is correct |
6 |
Correct |
37 ms |
43000 KB |
Output is correct |
7 |
Correct |
46 ms |
43128 KB |
Output is correct |
8 |
Correct |
53 ms |
43256 KB |
Output is correct |
9 |
Correct |
32 ms |
42880 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
27 ms |
42624 KB |
Output is correct |
2 |
Correct |
26 ms |
42624 KB |
Output is correct |
3 |
Correct |
28 ms |
42624 KB |
Output is correct |
4 |
Correct |
27 ms |
42624 KB |
Output is correct |
5 |
Correct |
28 ms |
42624 KB |
Output is correct |
6 |
Correct |
26 ms |
42624 KB |
Output is correct |
7 |
Correct |
26 ms |
42624 KB |
Output is correct |
8 |
Correct |
26 ms |
42624 KB |
Output is correct |
9 |
Correct |
25 ms |
42624 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
64 ms |
43768 KB |
Output is correct |
2 |
Correct |
63 ms |
43768 KB |
Output is correct |
3 |
Correct |
70 ms |
43128 KB |
Output is correct |
4 |
Correct |
27 ms |
42624 KB |
Output is correct |
5 |
Correct |
26 ms |
42624 KB |
Output is correct |
6 |
Correct |
27 ms |
42624 KB |
Output is correct |
7 |
Correct |
25 ms |
42624 KB |
Output is correct |
8 |
Correct |
245 ms |
43772 KB |
Output is correct |
9 |
Correct |
250 ms |
43768 KB |
Output is correct |