제출 #1348434

#제출 시각아이디문제언어결과실행 시간메모리
1348434jumpJust Long Neckties (JOI20_ho_t1)C++20
100 / 100
71 ms20472 KiB
#include <bits/stdc++.h>
#define int long long
int n;
std::vector<std::pair<int,int>> arr1;
std::vector<int> arr2;
int diff1[200010];
int pref[200010];
int diff2[200010];
int suff[200010];
std::vector<std::pair<int,int>> ans;
signed main(){
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::cin >> n;
  for(int i=1;i<=n+1;i++){
    int in;
    std::cin >> in;
    arr1.push_back({in,i});
  }
  std::sort(arr1.begin(),arr1.end());
  for(int i=1;i<=n;i++){
    int in;
    std::cin >> in;
    arr2.push_back(in);
  }
  std::sort(arr2.begin(),arr2.end());
  for(int i=0;i<n;i++){
    diff1[i]=arr1[i].first-arr2[i];
    diff2[i+1]=arr1[i+1].first-arr2[i];
    if(i!=0)
    pref[i]=std::max(pref[i-1],diff1[i]);
    else
    pref[i]=std::max((int)0,diff1[i]);
  }
  for(int i=n;i>=1;i--){
    if(i!=n)
    suff[i]=std::max(suff[i+1],diff2[i]);
    else
    suff[i]=std::max((int)0,diff2[i]);
  }
  for(int i=0;i<=n;i++){
    int v1=0,v2=0;
    if(i!=0)v1=pref[i-1];
    if(i!=n)v2=suff[i+1];
    ans.push_back({arr1[i].second,std::max(v1,v2)});
  }
  std::sort(ans.begin(),ans.end());
  for(auto [idx,num]:ans){
    std::cout << num << ' ';
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...