제출 #1358991

#제출 시각아이디문제언어결과실행 시간메모리
1358991jumpFeast (NOI19_feast)C++20
12 / 100
50 ms11372 KiB
#include <bits/stdc++.h>
#define int long long
int n,k;
int arr[300010];
int l[300010],r[300010];
int pref[300010];
bool enable[300010];
std::vector<int> narr;
signed main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::cin >> n >> k;
  int currRange = 0;
  for(int i=0;i<n;i++)std::cin >> arr[i];
  for(int i=0;i<n;i++){
    if(arr[i]<=0)arr[i]=0;
    else break;
  }
  for(int i=n-1;i>=0;i--){
    if(arr[i]<=0)arr[i]=0;
    else break;
  }
  narr.push_back(-1e9);
  for(int i=0;i<n;i++){
    if(arr[i]!=0){
      if(narr.empty())narr.push_back(arr[i]);
      else if(arr[i]>0&&narr.back()>0)narr.back()+=arr[i];
      else if(arr[i]<0&&narr.back()<0)narr.back()+=arr[i];
      else narr.push_back(arr[i]);
    }
  }
  narr.push_back(-1e9);
  int range = 0;
  int sum = 0;
  std::priority_queue<std::pair<int,int>> neg;
  for(int i=0;i<narr.size();i++){
    if(narr[i]>0){
      sum+=narr[i];
      range+=1;
      neg.push({-narr[i],i});
    }
    else{
      if(n!=0&&n!=narr.size()-1)
      neg.push({narr[i],i});
    }
    l[i]=i-1,r[i]=i+1,enable[i]=true;
    if(i==0)l[i]=i;
    if(i==narr.size()-1)r[i]=i;
    if(i==0)pref[i]=narr[i];
    else pref[i+1]=pref[i-1+1]+narr[i];
  }
  if(range<=k){
    std::cout << sum << '\n';
    return 0;
  }
  while(range>k){
    while(!neg.empty()&&!enable[neg.top().second])neg.pop();
    if(neg.empty())break;
    int value = -neg.top().first;
    int idx = neg.top().second;
    neg.pop();
    sum-=value;
    int li=l[idx],ri=r[idx];
    //std::cout << li << ' ' << idx << ' ' << ri << '\n';
    int newVal=(li!=0?narr[li]:0)+(ri!=narr.size()-1?narr[ri]:0)-narr[idx];
    enable[li]=false;
    enable[ri]=false;
    l[idx]=l[li];
    r[idx]=r[ri];
    r[l[idx]]=idx;
    l[r[idx]]=idx;
    neg.push({-std::abs(newVal),idx});
    range-=1;
  }
  std::cout << sum;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…