Submission #57418

#TimeUsernameProblemLanguageResultExecution timeMemory
57418fefeHoliday (IOI14_holiday)C++17
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
#define MAX_N 100005
using namespace std;
typedef long long LL;
struct pst{
	LL cnt,sum;
	pst *l,*r;
	pst(LL cnt,LL sum,pst *l,pst *r):cnt(cnt),sum(sum),l(l),r(r){}
	pst *update(LL idx,LL p){
		if(idx<0)	return new pst(cnt+1,sum+p,NULL,NULL);
		if(p>>idx&1)	return new pst(cnt+1,sum+p,l,r->update(idx-1,p));
		return new pst(cnt+1,sum+p,l->update(idx-1,p),r);
	}
}*tree[MAX_N];
LL n,st,d,dx,ans;
LL s_t[MAX_N],s_tt[MAX_N],e_t[MAX_N],e_tt[MAX_N];
LL get_sum(LL idx,pst *l,pst *r,LL x,LL p){
	if(idx<0)	return min(x,r->cnt-l->cnt)*p;
	LL y=r->l->cnt-l->l->cnt,z=r->r->cnt-l->r->cnt;
	if(r->cnt-l->cnt==p)	return r->sum-l->sum;
	if(y<x && z!=0)	return get_sum(idx-1,l->r,r->r,x-y,p|(1LL<<idx))+r->l->sum-l->l->sum;
	return get_sum(idx-1,l->l,r->l,x,p);
}
void dnc(LL s,LL e,LL l,LL r,bool p,bool q){
	LL mid=(l+r)>>1;
	LL i,di=s,dix=-1;
	LL x,y;
	LL a,b;
	if(l>r)	return;
	for(i=s;i<=e;i++){
		y=q?2*abs(st-i):abs(st-i);
		if(mid-y<0)	continue;
		x=get_sum(29,tree[(p?st:i-1)],tree[(p?i:st-1)],mid-y,0);
		if(x>dix){
			dix=x;
			di=i;
		}
	}
	if(q){
		if(p)	e_tt[mid]=max(e_tt[mid],dix);
		else	s_tt[mid]=max(s_tt[mid],dix);
	}else{
		if(p)	e_t[mid]=max(e_t[mid],dix);
		else	s_t[mid]=max(s_t[mid],dix);
	}
	dnc(s,di,l,mid-1,p,q);
	dnc(di,e,mid+1,r,p,q);
}
int main(){
	LL i,x;
	scanf("%lld %lld %lld",&n,&st,&d);
	tree[0]=new pst(0,0,NULL,NULL);tree[0]->l=tree[0]->r=tree[0];
	for(i=1;i<=n;i++){
		scanf("%lld",&x);
		tree[i]=tree[i-1]->update(29,x);
		if(i==st)	dx=x;
	}
	dnc(1,st-1,0,d,false,true);
	dnc(st+1,n,0,d,true,true);
	dnc(1,st-1,0,d,false,false);
	dnc(st+1,n,0,d,true,false);
	ans=max(max(s_t[d-1]+dx,s_t[d]),max(e_t[d-1]+dx,e_t[d]));
	for(i=0;i<=d;i++){
		ans=max(ans,max(s_t[i]+e_tt[d-i],s_tt[i]+e_t[d-i]));
		if(i!=d)	ans=max(ans,max(s_t[i]+e_tt[d-i-1],s_tt[i]+e_t[d-i-1])+dx);
	}
	printf("%lld\n",ans);
	return 0;
}

Compilation message (stderr)

holiday.cpp: In function 'void dnc(LL, LL, LL, LL, bool, bool)':
holiday.cpp:28:5: warning: unused variable 'a' [-Wunused-variable]
  LL a,b;
     ^
holiday.cpp:28:7: warning: unused variable 'b' [-Wunused-variable]
  LL a,b;
       ^
holiday.cpp: In function 'int main()':
holiday.cpp:51:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld %lld %lld",&n,&st,&d);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
holiday.cpp:54:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld",&x);
   ~~~~~^~~~~~~~~~~
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;
            ^~~
/tmp/ccks4BPb.o: In function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/ccAR4947.o:holiday.cpp:(.text.startup+0x0): first defined here
/tmp/ccks4BPb.o: In function `main':
grader.cpp:(.text.startup+0x7a): undefined reference to `findMaxAttraction(int, int, int, int*)'
collect2: error: ld returned 1 exit status