# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
882913 |
2023-12-04T06:34:04 Z |
ND0322 |
Holiday (IOI14_holiday) |
C++17 |
|
524 ms |
10384 KB |
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
const int MAXN = 1e5+5;
long long N, n, start, d, tmp[MAXN], b[MAXN], stp[MAXN<<2], stc[MAXN<<2], ans;
int lo, hi;
//first is pos
//second is cost
vector<long long> a;
void updatep(int node, int l, int r, int i, int val){
if(l == r){
stp[node] += val;
return;
}
int mid = (l+r)>>1;
if(i <= mid) updatep(node<<1, l, mid, i, val);
else updatep(node<<1|1, mid+1, r, i, val);
stp[node] = stp[node<<1] + stp[node<<1|1];
}
void updatec(int node, int l, int r, int i, long long val){
if(l == r){
stc[node] += val;
return;
}
int mid = (l+r)>>1;
if(i <= mid) updatec(node<<1,l,mid,i,val);
else updatec(node<<1|1, mid+1, r, i, val);
stc[node] = stc[node<<1] + stc[node<<1|1];
}
void update(int l, int r){
while(l < lo){
updatep(1, 1, n, b[lo-1], 1);
updatec(1, 1, n, b[lo-1], tmp[lo-1]);
lo--;
}
while(l > lo){
updatep(1, 1, n, b[lo], -1);
updatec(1, 1, n, b[lo], -tmp[lo]);
lo++;
}
while(r < hi){
updatep(1, 1, n, b[hi], -1);
updatec(1, 1, n, b[hi], -tmp[hi]);
hi--;
}
while(r > hi){
updatep(1, 1, n, b[hi+1], 1);
updatec(1, 1, n, b[hi+1], tmp[hi+1]);
hi++;
}
}
//the query is weird so recursive seg
long long query(int node, int l, int r, int i){
if(l == r){
long long c = stc[node];
//im fkn bald
if(stp[node] > i) c -= a[l-1] * (long long)(stp[node] - i);
return c;
}
int mid = (l+r)>>1;
if(stp[node<<1|1] >= i) return query(node<<1|1, mid+1, r, i);
return stc[node<<1|1] + query(node<<1, l,mid, i - stp[node<<1|1]);
}
void dac(int l, int r, int p1, int p2){
if(l > r) return;
int mid = (l+r)>>1;
int best = -1;
long long res = -1;
for(int i = p2; i >= p1; i--){
update(mid,i);
long long dist = min(i-start, start - mid) + i - mid;
if(dist > d) continue;
long long c = query(1,1,n,d-dist);
if(c > res){
res = c;
best = i;
}
}
ans = max(ans,res);
if(best == -1){
dac(mid+1, r, p1, p2);
return;
}
dac(l,mid-1, p1, best);
dac(mid+1,r,best,p2);
}
long long int findMaxAttraction(int nn, int s, int dd, int attraction[]){
N = nn;
start = s;
d = dd;
start++;
for(int i = 1; i <= N; i++){
tmp[i] = attraction[i-1];
a.push_back(tmp[i]);
}
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end() ), a.end());
//for(int i : a) cout << i << "\n";
n = a.size();
lo = 1;
hi = N;
for(int i = 1; i <= N; i++){
b[i] = lower_bound(a.begin(), a.end(), tmp[i])-a.begin()+1;
updatep(1,1,n,b[i],1);
updatec(1,1,n,b[i], tmp[i]);
}
dac(1, start, start, N);
return ans;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
4700 KB |
Output is correct |
2 |
Correct |
1 ms |
4700 KB |
Output is correct |
3 |
Correct |
1 ms |
4760 KB |
Output is correct |
4 |
Correct |
1 ms |
4696 KB |
Output is correct |
5 |
Correct |
1 ms |
4700 KB |
Output is correct |
6 |
Correct |
1 ms |
4700 KB |
Output is correct |
7 |
Correct |
1 ms |
4932 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
10 ms |
7376 KB |
Output is correct |
2 |
Correct |
10 ms |
7376 KB |
Output is correct |
3 |
Correct |
11 ms |
7452 KB |
Output is correct |
4 |
Correct |
12 ms |
7540 KB |
Output is correct |
5 |
Correct |
25 ms |
7628 KB |
Output is correct |
6 |
Correct |
8 ms |
5588 KB |
Output is correct |
7 |
Correct |
14 ms |
6100 KB |
Output is correct |
8 |
Correct |
17 ms |
6612 KB |
Output is correct |
9 |
Correct |
6 ms |
5332 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
4956 KB |
Output is correct |
2 |
Correct |
1 ms |
4956 KB |
Output is correct |
3 |
Correct |
4 ms |
4960 KB |
Output is correct |
4 |
Correct |
8 ms |
4952 KB |
Output is correct |
5 |
Correct |
5 ms |
4956 KB |
Output is correct |
6 |
Correct |
2 ms |
4956 KB |
Output is correct |
7 |
Correct |
3 ms |
4956 KB |
Output is correct |
8 |
Correct |
3 ms |
4964 KB |
Output is correct |
9 |
Correct |
2 ms |
4956 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
16 ms |
8144 KB |
Output is correct |
2 |
Correct |
49 ms |
10384 KB |
Output is correct |
3 |
Correct |
128 ms |
8652 KB |
Output is correct |
4 |
Correct |
7 ms |
4956 KB |
Output is correct |
5 |
Correct |
3 ms |
4956 KB |
Output is correct |
6 |
Correct |
3 ms |
4956 KB |
Output is correct |
7 |
Correct |
2 ms |
4956 KB |
Output is correct |
8 |
Correct |
524 ms |
10188 KB |
Output is correct |
9 |
Correct |
496 ms |
10256 KB |
Output is correct |