Submission #1154166

#TimeUsernameProblemLanguageResultExecution timeMemory
1154166alexddHoliday (IOI14_holiday)C++20
7 / 100
5094 ms1620 KiB
#include"holiday.h" #include<bits/stdc++.h> using namespace std; #define ll long long const int INF = 1e9; int n,start,d; int a[100005]; ll calc(int le, int ri) { assert(le<=start); assert(ri>=start); vector<pair<int,int>> v; for(int i=le;i<=ri;i++) { v.push_back({a[i],i}); } sort(v.begin(),v.end()); reverse(v.begin(),v.end()); ll sum=0; int mnm=INF, ramase = d - 2*(ri-start); for(int i=0;i<v.size();i++) { mnm = min(mnm, v[i].second); if(ramase - (start-mnm) < i+1) break; sum += v[i].first; } return sum; } ll solve() { ll mxm=0; /*int le=1; for(int ri=start;ri<=n;ri++) { while(le+1<=start && calc(le+1,ri) >= calc(le,ri)) le++; mxm = max(mxm, calc(le,ri)); }*/ for(int le=start;le>0;le--) for(int ri=start;ri<=n;ri++) mxm = max(mxm, calc(le,ri)); int poz=1; for(int ri=start;ri<=n;ri++) { ll cv=-1; int unde=-1; for(int i=poz;i<=start;i++) { int x = calc(i,ri); if(x > cv) { cv = x; unde = i; } } mxm = max(mxm, cv); poz = unde; } return mxm; } ll findMaxAttraction(int cit_n, int cit_start, int cit_d, int cit_a[]) { n = cit_n; start = cit_start + 1; d = cit_d; for(int i=0;i<n;i++) a[i+1] = cit_a[i]; ll idk = solve(); reverse(a+1,a+1+n); start = n - start + 1; idk = max(idk, solve()); return idk; } /* intindem siru la dreapta lui start dupa ce facem asta o sa avem: ramase = d - (ri-le) lun + luate = d ne fixam valoarea minima pe care o luam 0 - <lim 1 - >=lim vrem sa luam un interval (le,ri) a.i. cnt[ri] - cnt[le-1] <= d - (ri-le) */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...