Submission #595509

#TimeUsernameProblemLanguageResultExecution timeMemory
595509DeepessonUplifting Excursion (BOI22_vault)C++17
20 / 100
4240 ms4364 KiB
#include <bits/stdc++.h> #define MAX 1000005 int maximo[MAX]; int bonus = MAX/2; typedef std::pair<int,int> pii; int main() { long long N,M; std::cin>>N>>M; if(abs(M)>bonus){ std::cout<<"impossible\n"; return 0; } for(auto&x:maximo)x=-(1e6); maximo[bonus]=0; for(int i=-N;i<=N;++i){ int c; std::cin>>c; if(!c)continue; int valor=abs(i); if(!valor){ for(auto&x:maximo)x+=c; continue; } std::deque<pii> vals[valor]; ///Da direita para a esquerda if(i>0){ for(int j=0;j!=MAX-1;++j){ int mod = j%valor; int kok = j/valor; int v = -(1e8); while(vals[mod].size()){ if(kok-vals[mod].front().second>c){ vals[mod].pop_front(); continue; } v=vals[mod].front().first+kok; break; } while(vals[mod].size()&&vals[mod].back().first<maximo[j]-kok)vals[mod].pop_back(); vals[mod].push_back({maximo[j]-kok,kok}); maximo[j]=std::max(maximo[j],v); } }else if(i<0){ for(int j=MAX-1;j!=-1;--j){ int mod = j%valor; int kok = j/valor; int v = -(1e8); while(vals[mod].size()){ if(abs(kok-vals[mod].front().second)>c){ vals[mod].pop_front(); continue; } v=vals[mod].front().first-kok; break; } while(vals[mod].size()&&vals[mod].back().first<maximo[j]+kok)vals[mod].pop_back(); vals[mod].push_back({maximo[j]+kok,kok}); maximo[j]=std::max(maximo[j],v); } } } ///como proceder caso x=0? if(maximo[M+bonus]<=0){ std::cout<<"impossible\n"; return 0; } std::cout<<maximo[M+bonus]<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...