Submission #1746297


Source Code Expand

#include <iostream>
#include <cstdio>
#include <cstring>
#include <climits>
#include <functional>

#define N 100000

using namespace std;

int parent(int i){return((i-1)/2);}
int lchild(int i){return(2*i+1);}
int rchild(int i){return(2*i+2);}

bool gt(int x, int y){
  return(x > y);
}

bool lt(int x, int y){
  return(x < y);
}

void push(int x, int *pq, int *q_max, function<bool(int, int)> f){
  pq[*q_max] = x;
  int idx = *q_max;
  (*q_max)++;
  while (idx > 0) {
    if (f(pq[idx], pq[parent(idx)])) {
      int tmp = pq[parent(idx)];
      pq[parent(idx)] = pq[idx];
      pq[idx] = tmp;
      idx = parent(idx);
    } else {
      return;
    }
  }
}

int pop(int *pq, int *q_max, function<bool(int, int)> f){
  if (*q_max < 0) {
    cerr << "queue is empty." << endl;
    return 0;
  }
  int result = pq[0];
  pq[0] = pq[--(*q_max)];
  int idx = 0;
  while (lchild(idx) < *q_max) {
    if (f(pq[idx], pq[lchild(idx)]) && f(pq[idx], pq[rchild(idx)])) {
      return(result);
    }
    if (f(pq[lchild(idx)], pq[rchild(idx)])) {
      int tmp = pq[lchild(idx)];
      pq[lchild(idx)] = pq[idx];
      pq[idx] = tmp;
      idx = lchild(idx);
    } else {
      int tmp = pq[rchild(idx)];
      pq[rchild(idx)] = pq[idx];
      pq[idx] = tmp;
      idx = rchild(idx);
    } 
  }
  return(result);
}


int main(){
  int n;
  int a1_pq[N+1], a2[N+1], a3_pq[N+1];
  int a1_pq_max = 0;
  int a3_pq_max = 0;
  long long a1_max[N+1], a3_min[N+1];
  cin >> n;
  a1_max[0] = 0;
  a3_min[n] = 0;
  for (int i=0;i<n;i++) {
    int a;
    cin >> a;
    push(a, a1_pq, &a1_pq_max, lt);
    a1_max[0] += a;
  }
  for (int i=0;i<n;i++) {
    int a;
    cin >> a;
    a2[i] = a;
  }
  for (int i=0;i<n;i++) {
    int a;
    cin >> a;
    push(a, a3_pq, &a3_pq_max, gt);
    a3_min[n] += a;
  }
  for (int i=0;i<n;i++) {
    if (a1_pq[0] < a2[i]) {
      a1_max[i+1] = a2[i] - a1_pq[0] + a1_max[i];
      pop(a1_pq, &a1_pq_max, lt);
      push(a2[i], a1_pq, &a1_pq_max, lt);
    } else {
      a1_max[i+1] = a1_max[i];
    }
  }
  for (int i=n;i>0;i--) {
    if (a3_pq[0] > a2[i-1]) {
      a3_min[i-1] = a2[i-1] - a3_pq[0] + a3_min[i];
      pop(a3_pq, &a3_pq_max, gt);
      push(a2[i-1], a3_pq, &a3_pq_max, gt);
    } else {
      a3_min[i-1] = a3_min[i];
    }
  }
  long long result = LLONG_MIN;
  for (int i=0;i<=n;i++) {
    if (a1_max[i] - a3_min[i] > result) {
      result = a1_max[i] - a3_min[i];
    }
  }
  cout << result << endl;  
}

Submission Info

Submission Time
Task D - 3N Numbers
User ntgo
Language C++14 (GCC 5.4.1)
Score 500
Code Size 2555 Byte
Status AC
Exec Time 155 ms
Memory 2944 KB

Judge Result

Set Name Sample Subtask All
Score / Max Score 0 / 0 300 / 300 200 / 200
Status
AC × 3
AC × 27
AC × 43
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt
Subtask 0_00.txt, 0_01.txt, 0_02.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 2_00.txt, 2_01.txt, 2_02.txt, 2_03.txt, 2_04.txt, 2_05.txt, 2_06.txt, 2_07.txt, 2_08.txt, 2_09.txt, 2_10.txt, 2_11.txt, 2_12.txt, 2_13.txt, 2_14.txt, 2_15.txt
Case Name Status Exec Time Memory
0_00.txt AC 1 ms 256 KB
0_01.txt AC 1 ms 256 KB
0_02.txt AC 1 ms 256 KB
1_00.txt AC 1 ms 256 KB
1_01.txt AC 1 ms 256 KB
1_02.txt AC 1 ms 256 KB
1_03.txt AC 2 ms 2304 KB
1_04.txt AC 1 ms 256 KB
1_05.txt AC 2 ms 2304 KB
1_06.txt AC 1 ms 256 KB
1_07.txt AC 1 ms 256 KB
1_08.txt AC 2 ms 2304 KB
1_09.txt AC 2 ms 256 KB
1_10.txt AC 3 ms 2304 KB
1_11.txt AC 2 ms 256 KB
1_12.txt AC 2 ms 256 KB
1_13.txt AC 2 ms 256 KB
1_14.txt AC 3 ms 2304 KB
1_15.txt AC 2 ms 256 KB
1_16.txt AC 2 ms 2304 KB
1_17.txt AC 2 ms 256 KB
1_18.txt AC 2 ms 2304 KB
1_19.txt AC 2 ms 256 KB
1_20.txt AC 3 ms 256 KB
1_21.txt AC 3 ms 256 KB
1_22.txt AC 3 ms 2304 KB
1_23.txt AC 3 ms 256 KB
2_00.txt AC 49 ms 2944 KB
2_01.txt AC 135 ms 2944 KB
2_02.txt AC 130 ms 2944 KB
2_03.txt AC 115 ms 2944 KB
2_04.txt AC 115 ms 2944 KB
2_05.txt AC 116 ms 2944 KB
2_06.txt AC 116 ms 2944 KB
2_07.txt AC 101 ms 2944 KB
2_08.txt AC 66 ms 2944 KB
2_09.txt AC 65 ms 2944 KB
2_10.txt AC 66 ms 2944 KB
2_11.txt AC 65 ms 2944 KB
2_12.txt AC 153 ms 2944 KB
2_13.txt AC 155 ms 2944 KB
2_14.txt AC 154 ms 2944 KB
2_15.txt AC 153 ms 2944 KB