# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
747099 |
2023-05-23T15:49:30 Z |
nicksms |
Holiday (IOI14_holiday) |
C++17 |
|
226 ms |
49300 KB |
#include"holiday.h"
/**
* Author: Nicholas Winschel
* Created: 05.23.2023 11:04:21
**/
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using db=long double;
template<class T> using V=vector<T>;
using vi = V<int>;
using vl = V<ll>;
using pi = pair<int,int>;
#define f first
#define s second
#define sz(x) (int)((x).size())
// NOT ORIGINAL
// credit https://oj.uz/submission/211797 for solution ideas
// my idea was so much more shenanigans lol
// basically for maintianing sum of k smallest i didnt see the persistent segtree
// so i had a two poitners idea that would do some funny pushleft/pushright to do the dnc dp
struct pst {
struct node {ll v=0; int c=0,l=0,r=0;};
int N, nind=0,rind=0;
V<node> nodes;
vi root,vals;
pst (vi &&_): N(_.size()), nodes(2000000), root(N+1), vals(move(_)) {}
void add(int x, int s, int e, int &i) {
int p = i; i = ++nind;
nodes[i] = {nodes[p].v + vals[x], nodes[p].c+1, nodes[p].l, nodes[p].r};
if (s==e) return;
int m = (s+e)>>1;
if (x <= m) add(x, s, m, nodes[i].l);
else add(x, m+1, e, nodes[i].r);
}
void add(int x) {rind++; add(x, 0, N-1, root[rind]=root[rind-1]);}
ll sum (int k, int s, int e, int i, int j) {
if (nodes[j].c - nodes[i].c <= k) return nodes[j].v-nodes[i].v;
if (s==e) return vals[s]*ll(k); // this is cause pos dup
int m = (s+e)>>1,
cr = nodes[nodes[j].r].c-nodes[nodes[i].r].c;
if (k <= cr) return sum(k,m+1,e,nodes[i].r,nodes[j].r);
else return sum(k-cr,s,m,nodes[i].l,nodes[j].l)+(nodes[nodes[j].r].v - nodes[nodes[i].r].v);
}
ll sum (int k, int l, int r) {
return sum(k, 0, N-1, root[l],root[r+1]);
}
};
long long int findMaxAttraction(int n, int start, int d, int a[]) {
vi x(a,a+n);
sort(x.begin(),x.end());
for (int i = 0; i < n; i++) a[i]=lower_bound(x.begin(),x.end(),a[i])-x.begin();
ll b = 0;
pst sg(move(x));
for (int i = 0; i < n; i++) sg.add(a[i]);
auto dnq = [&](int s, int e, int optl, int optr, auto &&dnq) -> void {
if (s > e || optl > optr) return;
int m = (s+e)>>1;
pair<ll,int> cb = {-1,-1};
for (int t = optl; t <= optr; t++) {
cb=max(cb, {sg.sum(d- (t-m + min(t-start,start-m)),m,t),t});
}
b=max(b,cb.f);
dnq(s,m-1,optl,cb.s,dnq);
dnq(m+1,e,cb.s,optr,dnq);
};
dnq(max(start-d,0),start,start,min(start+d,n-1),dnq);
return b;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
30 ms |
47564 KB |
Output is correct |
2 |
Correct |
22 ms |
47572 KB |
Output is correct |
3 |
Correct |
25 ms |
47588 KB |
Output is correct |
4 |
Correct |
22 ms |
47652 KB |
Output is correct |
5 |
Correct |
22 ms |
47596 KB |
Output is correct |
6 |
Correct |
22 ms |
47572 KB |
Output is correct |
7 |
Correct |
22 ms |
47608 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
49 ms |
48624 KB |
Output is correct |
2 |
Correct |
61 ms |
48504 KB |
Output is correct |
3 |
Correct |
49 ms |
48612 KB |
Output is correct |
4 |
Correct |
47 ms |
48644 KB |
Output is correct |
5 |
Correct |
56 ms |
48708 KB |
Output is correct |
6 |
Correct |
33 ms |
47924 KB |
Output is correct |
7 |
Correct |
49 ms |
48168 KB |
Output is correct |
8 |
Correct |
61 ms |
48204 KB |
Output is correct |
9 |
Correct |
28 ms |
47812 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
29 ms |
47596 KB |
Output is correct |
2 |
Correct |
24 ms |
47680 KB |
Output is correct |
3 |
Correct |
23 ms |
47672 KB |
Output is correct |
4 |
Correct |
26 ms |
47628 KB |
Output is correct |
5 |
Correct |
24 ms |
47608 KB |
Output is correct |
6 |
Correct |
22 ms |
47640 KB |
Output is correct |
7 |
Correct |
23 ms |
47632 KB |
Output is correct |
8 |
Correct |
22 ms |
47624 KB |
Output is correct |
9 |
Correct |
23 ms |
47552 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
53 ms |
49216 KB |
Output is correct |
2 |
Correct |
59 ms |
49300 KB |
Output is correct |
3 |
Correct |
70 ms |
48332 KB |
Output is correct |
4 |
Correct |
24 ms |
47560 KB |
Output is correct |
5 |
Correct |
21 ms |
47616 KB |
Output is correct |
6 |
Correct |
22 ms |
47676 KB |
Output is correct |
7 |
Correct |
24 ms |
47668 KB |
Output is correct |
8 |
Correct |
226 ms |
49264 KB |
Output is correct |
9 |
Correct |
218 ms |
49296 KB |
Output is correct |