# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
424900 |
2021-06-12T11:24:13 Z |
vanic |
Holiday (IOI14_holiday) |
C++14 |
|
1159 ms |
14444 KB |
#include "holiday.h"
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <cassert>
#include <iostream>
using namespace std;
typedef long long ll;
const int maxn=1e5+5, Log=17, pot=(1<<Log);
ll t[pot*2];
int br[pot*2];
int niz[maxn];
int pos[maxn];
bool cmp(int a, int b){
return niz[a]>niz[b];
}
void update(int x){
x+=pot;
br[x]^=1;
for(x/=2; x>0; x/=2){
br[x]=br[x*2]+br[x*2+1];
t[x]=0;
if(br[x*2]){
t[x]+=t[x*2];
}
if(br[x*2+1]){
t[x]+=t[x*2+1];
}
}
}
ll query(int x, int broj){
// cout << x << ' ' << broj << endl;
if(broj<=0 || !br[x]){
return 0;
}
if(br[x]<=broj){
return t[x];
}
return query(x*2, broj)+query(x*2+1, broj-br[x*2]);
}
pair < int, ll > dp1[maxn*3];
pair < int, ll > dp2[maxn*3];
int pozicija[maxn];
int poc;
void rijesi1(int L, int D, int l, int d){
// cout << L << ' ' << D << ' ' << l << ' ' << d << endl;
if(L==D){
return;
}
if(l>=d){
return;
}
int mid=(l+d)/2;
ll maksi=0;
int ind=L;
ll val;
for(int i=L; i<D; i++){
update(pozicija[i]);
val=query(1, mid-(i-poc));
if(maksi<val){
maksi=val;
ind=i;
}
}
dp1[mid]={ind, maksi};
for(int i=L; i<D; i++){
update(pozicija[i]);
}
rijesi1(L, ind+1, l, mid);
for(int i=L; i<ind; i++){
update(pozicija[i]);
}
rijesi1(ind, D, mid+1, d);
for(int i=L; i<ind; i++){
update(pozicija[i]);
}
}
void rijesi2(int L, int D, int l, int d){
// cout << L << ' ' << D << ' ' << l << ' ' << d << endl;
if(L==D){
return;
}
if(l>=d){
return;
}
int mid=(l+d)/2;
ll maksi=0;
int ind=D-1;
ll val;
for(int i=D-1; i>=L; i--){
update(pozicija[i]);
val=query(1, mid-(poc-i));
// cout << val << endl;
if(maksi<val){
maksi=val;
ind=i;
}
}
// cout << mid << ' ' << ind << ' ' << maksi << endl;
// cout << "poso" << endl;
dp2[mid]={ind, maksi};
for(int i=L; i<D; i++){
update(pozicija[i]);
}
rijesi2(ind, D, l, mid);
for(int i=D-1; i>ind; i--){
update(pozicija[i]);
}
rijesi2(L, ind+1, mid+1, d);
for(int i=D-1; i>ind; i--){
update(pozicija[i]);
}
}
ll findMaxAttraction(int n, int x, int d, int l[]){
poc=x;
for(int i=0; i<n; i++){
niz[i]=l[i];
pos[i]=i;
}
sort(pos, pos+n, cmp);
for(int i=0; i<n; i++){
t[i+pot]=niz[pos[i]];
pozicija[pos[i]]=i;
}
rijesi1(x, n, 0, n*3);
rijesi2(0, x, 0, n*3);
/* for(int i=0; i<n*3; i++){
cout << dp1[i].second << ' ';
}
cout << endl;
for(int i=0; i<n*3; i++){
cout << dp2[i].second << ' ';
}
cout << endl;*/
int druga;
ll uk;
ll sol=0;
for(int i=0; i<=d; i++){
druga=max(0, d-i-(dp1[i].first-x));
uk=dp1[i].second+dp2[druga].second;
sol=max(sol, uk);
druga=max(0, d-i-(x-dp2[i].first));
uk=dp2[i].second+dp1[druga].second;
sol=max(sol, uk);
}
return sol;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
716 KB |
Output is correct |
2 |
Correct |
1 ms |
716 KB |
Output is correct |
3 |
Correct |
1 ms |
716 KB |
Output is correct |
4 |
Correct |
1 ms |
716 KB |
Output is correct |
5 |
Correct |
1 ms |
716 KB |
Output is correct |
6 |
Correct |
1 ms |
716 KB |
Output is correct |
7 |
Correct |
1 ms |
716 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
883 ms |
8944 KB |
Output is correct |
2 |
Correct |
563 ms |
8944 KB |
Output is correct |
3 |
Correct |
940 ms |
8892 KB |
Output is correct |
4 |
Correct |
652 ms |
9028 KB |
Output is correct |
5 |
Correct |
942 ms |
8416 KB |
Output is correct |
6 |
Correct |
259 ms |
3140 KB |
Output is correct |
7 |
Correct |
502 ms |
5096 KB |
Output is correct |
8 |
Correct |
616 ms |
5908 KB |
Output is correct |
9 |
Correct |
187 ms |
2460 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
28 ms |
1076 KB |
Output is correct |
2 |
Correct |
24 ms |
1048 KB |
Output is correct |
3 |
Correct |
28 ms |
1096 KB |
Output is correct |
4 |
Correct |
25 ms |
1016 KB |
Output is correct |
5 |
Correct |
25 ms |
1100 KB |
Output is correct |
6 |
Correct |
9 ms |
852 KB |
Output is correct |
7 |
Correct |
9 ms |
844 KB |
Output is correct |
8 |
Correct |
10 ms |
820 KB |
Output is correct |
9 |
Correct |
10 ms |
844 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1000 ms |
13532 KB |
Output is correct |
2 |
Correct |
1148 ms |
8956 KB |
Output is correct |
3 |
Correct |
461 ms |
6916 KB |
Output is correct |
4 |
Correct |
24 ms |
1060 KB |
Output is correct |
5 |
Correct |
9 ms |
844 KB |
Output is correct |
6 |
Correct |
9 ms |
816 KB |
Output is correct |
7 |
Correct |
11 ms |
896 KB |
Output is correct |
8 |
Correct |
1159 ms |
14444 KB |
Output is correct |
9 |
Correct |
1137 ms |
14408 KB |
Output is correct |