#include"holiday.h"
#include <bits/stdc++.h>
using namespace std;
#define Rl Root[rt].l
#define Rr Root[rt].r
#define Ll Root[lt].l
#define Lr Root[lt].r
const int N = 1e5+7;
int n,start,d,a[N],cnt,t,main_Root[N];
struct node{
int l,r,cnt;
long long val;
}Root[N*30];
void build(int rt,int l,int r){
Root[rt].cnt=0;Root[rt].val=0;
if(l==r)return;
int m=(l+r)/2;
Rl=++cnt;
Rr=++cnt;
build(Rl,l,m);
build(Rr,m+1,r);
}
void upd(int lt,int rt,int l,int r,long long pos,long long v2){
Root[rt].cnt=Root[lt].cnt+1;
Root[rt].val=Root[lt].val+v2;
// cout<<"update "<<rt<<" "<< l<<" "<<r<<" "<<pos<<" "<<v2<<" "<<Root[rt].cnt<<" "<<Root[rt].val<<endl;
if(l==r)return;
int m=(l+r)/2;
if(m>=pos){
Rl=++cnt;
Rr=Lr;
upd(Ll,Rl,l,m,pos,v2);
}
else {
Rl=Ll;
Rr=++cnt;
upd(Lr,Rr,m+1,r,pos,v2);
}
if(Root[rt].val!=Root[Rl].val+Root[Rr].val){
assert(0);
}
}
long long get(int lt,int rt,int l,int r,long long k){
if(k<=0)return 0;
int opt=Root[rt].cnt-Root[lt].cnt;
long long val=Root[rt].val-Root[lt].val;
//cout<<lt<<" "<<rt<< " "<<l<<" "<<r<<" "<<opt<<" "<<val<<" "<<k<<endl;
if(l==r){
if(k<=opt){
return (Root[rt].val-Root[lt].val)/(Root[rt].cnt-Root[lt].cnt)*k;
assert(0);
}
return val;
}
long long optr=Root[Rr].cnt-Root[Lr].cnt;
long long vr=Root[Rr].val-Root[Lr].val;
int m=(l+r)/2;
//cout<<optr<<" "<<vr<<" "<<k<<endl;
if(optr>k){
return get(Lr,Rr,m+1,r,k);
}
else{
return vr+get(Ll,Rl,l,m,k-optr);
}
}
long long ans=0;
void fnd_ans(int tl,int tr,int l,int r){
if(tl>tr||l>r)return;
int m=(l+r)/2;
int bst=tr;
long long cur=-1;
//cout<<start<<" "<<tl<< " "<<tr<<" "<<l<<" "<<r<<endl;
for(int i=tl;i<=tr;++i){
// cout<<i<<" "<<m<<" "<<d-m+i-min(start-i,m-start)<<endl;
long long c=get(main_Root[i-1],main_Root[m],1,t,d-m+i-min(start-i,m-start));
// cout<<l<<" "<<r<<" "<<tl<<" "<<tr<<endl;
// cout<<i<<" "<<m<<" "<<c<<endl;
if(c>cur){
cur=c;
bst=i;
}
}
ans=max(ans,cur);
fnd_ans(tl,bst,l,m-1);
fnd_ans(bst,tr,m+1,r);
}
map<int,int> how,wh;
long long int findMaxAttraction(int n, int startt, int d, int attraction[]) {
::n=n,start=startt,::d=d;
for(int i=0;i<n;++i)a[i]=attraction[i];
for(int i=0;i<n;++i)wh[a[i]]++;
for(auto to:wh){
how[to.first]=++t;
}
main_Root[0]=++cnt;
// cout<<"hi"<<endl;
build(main_Root[0],1,t);
//cout<<"end"<<endl;
for(int i=1;i<=n;++i){
main_Root[i]=++cnt;
upd(main_Root[i-1],main_Root[i],1,t,how[a[i-1]],a[i-1]);
}
// cout<<t<<endl;
start++;
fnd_ans(1,start,start,n);
return ans;
}
Compilation message
grader.cpp: In function 'int main()':
grader.cpp:7:12: warning: variable 'n_s' set but not used [-Wunused-but-set-variable]
int i, n_s;
^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
248 KB |
Output is correct |
2 |
Correct |
2 ms |
360 KB |
Output is correct |
3 |
Correct |
3 ms |
440 KB |
Output is correct |
4 |
Correct |
3 ms |
444 KB |
Output is correct |
5 |
Correct |
3 ms |
496 KB |
Output is correct |
6 |
Correct |
2 ms |
580 KB |
Output is correct |
7 |
Correct |
2 ms |
580 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
20 ms |
4164 KB |
Output is correct |
2 |
Correct |
23 ms |
4456 KB |
Output is correct |
3 |
Correct |
22 ms |
6992 KB |
Output is correct |
4 |
Correct |
22 ms |
7140 KB |
Output is correct |
5 |
Correct |
63 ms |
19308 KB |
Output is correct |
6 |
Correct |
18 ms |
19308 KB |
Output is correct |
7 |
Correct |
36 ms |
19308 KB |
Output is correct |
8 |
Correct |
42 ms |
19308 KB |
Output is correct |
9 |
Correct |
15 ms |
19308 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
19308 KB |
Output is correct |
2 |
Correct |
3 ms |
19308 KB |
Output is correct |
3 |
Correct |
6 ms |
19308 KB |
Output is correct |
4 |
Correct |
7 ms |
19308 KB |
Output is correct |
5 |
Correct |
9 ms |
19308 KB |
Output is correct |
6 |
Correct |
4 ms |
19308 KB |
Output is correct |
7 |
Correct |
4 ms |
19308 KB |
Output is correct |
8 |
Correct |
3 ms |
19308 KB |
Output is correct |
9 |
Correct |
3 ms |
19308 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
20 ms |
19308 KB |
Output is correct |
2 |
Correct |
203 ms |
59824 KB |
Output is correct |
3 |
Correct |
171 ms |
59824 KB |
Output is correct |
4 |
Correct |
8 ms |
59824 KB |
Output is correct |
5 |
Correct |
4 ms |
59824 KB |
Output is correct |
6 |
Correct |
6 ms |
59824 KB |
Output is correct |
7 |
Correct |
4 ms |
59824 KB |
Output is correct |
8 |
Correct |
548 ms |
59824 KB |
Output is correct |
9 |
Correct |
552 ms |
60016 KB |
Output is correct |