제출 #1180761

#제출 시각아이디문제언어결과실행 시간메모리
1180761AlgorithmWarrior휴가 (IOI14_holiday)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> ///#include "holiday.h" using namespace std; void maxself(long long& x,long long val){ if(x<val) x=val; } int const INF=1000000000; int const MAX=1000000; int const NMAX=100005; int root[NMAX]; long long ans; struct node{ int cnt; long long sum; int lson,rson; }; struct PST{ node v[MAX]; int total; void update(int nod,int past,int st,int dr,int poz){ if(st==dr){ v[nod].cnt=v[past].cnt+1; v[nod].sum=v[past].sum+poz; } else{ int mij=(st+dr)/2; if(poz<=mij){ v[nod].lson=++total; v[nod].rson=v[past].rson; update(v[nod].lson,v[past].lson,st,mij,poz); } else{ v[nod].lson=v[past].lson; v[nod].rson=++total; update(v[nod].rson,v[past].rson,mij+1,dr,poz); } v[nod].cnt=v[v[nod].lson].cnt+v[v[nod].rson].cnt; v[nod].sum=v[v[nod].lson].sum+v[v[nod].rson].sum; } } long long get_sum(int nod1,int nod2,int st,int dr,int k){ if(st==dr) return 1LL*k*st; int mij=(st+dr)/2; int dreapta=v[v[nod1].rson].cnt-v[v[nod2].rson].cnt; if(dreapta>=k) return get_sum(v[nod1].rson,v[nod2].rson,mij+1,dr,k); return v[v[nod1].rson].sum-v[v[nod2].rson].sum+get_sum(v[nod1].lson,v[nod2].lson,st,mij,k-dreapta); } }aint; void dei(int l,int r,int optl,int optr,int start,int d){ if(l>r) return; int optIndex=0; long long optAns=-1; int i; int mij=(l+r)/2; for(i=optl;i<=optr;++i){ int drum1=start-mij; int drum2=i-start; int drum=((drum1<drum2)?2*drum1+drum2:drum1+2*drum2); int k=d-drum; long long rasp=0; if(k>0) rasp=aint.get_sum(root[i+1],root[mij],0,INF,min(k,i-mij+1)); if(rasp>optAns){ optAns=rasp; optIndex=i; } } maxself(ans,optAns); dei(l,mij-1,optl,optIndex,start,d); dei(mij+1,r,optIndex,optr,start,d); } long long int findMaxAttraction(int n, int start, int d, int attraction[]){ int i; for(i=0;i<n;++i){ root[i+1]=++aint.total; aint.update(root[i+1],root[i],0,INF,attraction[i]); } dei(0,start,start,n-1,start,d); return ans; } int main() { int n, start, d; int attraction[100000]; int i, n_s; n_s = scanf("%d %d %d", &n, &start, &d); for (i = 0 ; i < n; ++i) { n_s = scanf("%d", &attraction[i]); } printf("%lld\n", findMaxAttraction(n, start, d, attraction)); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/cciRQJNv.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccp9c01N.o:holiday.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status