제출 #1228832

#제출 시각아이디문제언어결과실행 시간메모리
1228832Muhammad_AneeqHomecoming (BOI18_homecoming)C++20
0 / 100
1097 ms20292 KiB
#include <iostream> #include <deque> #include <vector> #include <queue> #include <set> using namespace std; int const NN=2e6+10; long long dp[NN],pre[NN],val[NN]; long long sol(deque<int>a,deque<int>b,int k) { int n=a.size(); pre[0]=0; for (int i=0;i<n;i++) pre[i+1]=pre[i]+b[i]; dp[0]=a[0]-pre[k]; priority_queue<pair<int,int>>pq; pq.push({dp[0]+pre[k],0}); long long mx=dp[0]; for (int i=1;i<n;i++) { long long sm=pre[min(n,i+k)]-pre[i]; dp[i]=mx; while (pq.size()&&pq.top().second<=i-k) pq.pop(); if (pq.size()) dp[i]=max(dp[i],pq.top().first-pre[i]); dp[i]=dp[i]+a[i]-sm; mx=max(mx,dp[i]); pq.push({dp[i]+pre[min(i+k,n)],i}); } return mx; } long long solve(int N, int K, int *A, int *B) { long long ans=0; int n=N; deque<int>a,b; for (int i=0;i<n;i++) a.push_back(A[i]),b.push_back(B[i]); for (int i=0;i<n;i++) { ans=max(ans,sol(a,b,K)); a.push_back(a.front()); a.pop_front(); b.push_back(b.front()); b.pop_front(); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...