제출 #199121

#제출 시각아이디문제언어결과실행 시간메모리
199121red1108휴가 (IOI14_holiday)C++17
컴파일 에러
0 ms0 KiB
#include<bits/stdc++.h> #include<ext/rope> using namespace std; using namespace __gnu_cxx; #define fi first #define se second #define fastio ios_base::sync_with_stdio(false);cin.tie(0) #define fopen freopen("input.txt", "r", stdin) #define eb emplace_back #define em emplace #define prec(a) cout<<fixed;cout.precision(a); #define all(a) (a).begin(), (a).end() typedef long long ll; typedef long double ld; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef tuple<int,int,int> tiii; const ll INF = 2e16; const int inf = 2e9; template<class T> void pr(T t) {cout << t << " ";} template<class T, class ...Args> void pr(T a, Args ...args) {cout << a << " ";pr(args...);} template<class ...Args> void prl(Args ...args) {pr(args...);cout << endl;} int n, st, d, in[100010],p[100010],root[100010],si; ll ans=0; vector<pii> h; struct Node{ int cnt,l,r; ll sum; Node(){cnt=sum=l=r=0;} }; Node pst[2500000]; void add(int a, int b, int l, int r, int ind){ pst[b].cnt = pst[a].cnt + 1; pst[b].sum = pst[a].sum + h[ind-1].fi; pst[b].l = pst[a].l;pst[b].r = pst[a].r; if(l==r) return ; int m = (l+r)/2; if(ind<=m){ pst[b].l = si;pst[si++]=Node(); add(pst[a].l,pst[b].l,l,m,ind); } else{ pst[b].r = si;pst[++si]=Node(); add(pst[a].r,pst[b].r,m+1,r,ind); } } ll f(int a, int b, int l, int r, int k){ if((a==0&&b==0)||k==0) return 0; int c = pst[pst[b].r].cnt-pst[pst[a].r].cnt; if(l==r) return pst[b].sum-pst[a].sum; if(c>=k) return f(pst[a].r,pst[b].r,(l+r)/2+1,r,k); else return f(pst[a].l,pst[b].l,l,(l+r)/2,k-c)+(pst[pst[b].r].sum-pst[pst[a].r].sum); } void solve(int s, int e, int l, int r){ if(s>e) return ; int m = (s+e)/2,ind=max((s+e)/2,l); ll cur = 0; for(int i = max(m,l);i<=r;i++){ int k = min(i-m+1, d - abs(m-st) - abs(i-m)); if(d<=0) break ; ll t = f(root[m-1],root[i],1,n,k); if(cur<=t){ cur = t; ind = i; } } ans = max(ans, cur); solve(s,m-1,l,ind); solve(m+1,e,ind,r); } void calc(){ si=1; //prl("hi"); for(int i=1;i<=n;i++){ //prl("i=",i,"val=",h[p[i]-1].fi); root[i] = si; pst[si++]=Node(); add(root[i-1], root[i], 1, n, p[i]); assert(si<2500000); } //prl("debug:",f(root[1],root[3],1,n,1)); solve(1,n,1,n); } int main(){ cin>>n>>st>>d; for(int i=1;i<=n;i++){ cin>>in[i]; h.eb(in[i],i); } sort(h.begin(), h.end()); for(int i=0;i<h.size();i++) p[h[i].se]=i+1; calc(); reverse(in+1,in+n+1); reverse(p+1,p+n+1); st = n-st+1; calc(); cout<<ans; }

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

holiday.cpp: In function 'int main()':
holiday.cpp:95:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<h.size();i++) p[h[i].se]=i+1;
              ~^~~~~~~~~
/tmp/ccd2Xuia.o: In function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/ccrEpfNr.o:holiday.cpp:(.text.startup+0x0): first defined here
/tmp/ccd2Xuia.o: In function `main':
grader.cpp:(.text.startup+0x89): undefined reference to `findMaxAttraction(int, int, int, int*)'
collect2: error: ld returned 1 exit status