Submission #1138565

#TimeUsernameProblemLanguageResultExecution timeMemory
1138565mychecksedadWall (IOI14_wall)C++20
24 / 100
281 ms12384 KiB
#include "wall.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define MOD (1000000000+7)
#define MOD1 (998244353)
#define pb push_back
#define all(x) x.begin(), x.end()
#define en cout << '\n'
#define ff first
#define ss second
#define pii pair<int,int>
#define vi vector<int>
const int N = 1e6+100, M = 1e5+10, K = 52, MX = 30;

int L[N], R[N], T[N];
void build(int l, int r, int k){
  L[k] = -1;
  R[k] = MOD;
  T[k] = 0;
  if(l == r){
    return;
  }
  int m = l+r>>1;
  build(l, m, k<<1);
  build(m+1, r, k<<1|1);
}
void push(int k){
  if(L[k] != -1){
    L[k<<1] = max(L[k], L[k<<1]);
    L[k<<1|1] = max(L[k], L[k<<1|1]);
    T[k<<1] = max(T[k<<1], L[k]);
    T[k<<1|1] = max(T[k<<1|1], L[k]);
    L[k] = -1;
  }
  if(R[k] != MOD){
    R[k<<1] = min(R[k], R[k<<1]);
    R[k<<1|1] = min(R[k], R[k<<1|1]);
    T[k<<1] = min(T[k<<1], R[k]);
    T[k<<1|1] = min(T[k<<1|1], R[k]);
    R[k] = MOD;
  }
}
void upd(int l, int r, int ql, int qr, int k, bool tp, int val){
  if(ql > r || l > qr) return;
  if(ql <= l && r <= qr){
    if(tp == 0){ // min
      R[k] = min(R[k], val);
      T[k] = min(T[k], val);
    }else{
      L[k] = max(L[k], val);
      T[k] = max(T[k], val);
    }
    return;
  }
  push(k);
  int m = l+r>>1;
  upd(l, m, ql, qr, k<<1, tp, val);
  upd(m+1, r, ql, qr, k<<1|1, tp, val);
}

int get(int l, int r, int p, int k){
  if(l == r){
    return T[k];
  }
  push(k);
  int m = l+r>>1;
  if(p <= m) return get(l, m, p, k<<1);
  return get(m+1, r, p, k<<1|1);
}

void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){
  build(0, n - 1, 1);

  for(int i = 0; i < k; ++i){
    int tp = op[i];
    upd(0, n - 1, left[i], right[i], 1, 1-(tp-1), height[i]);
  } 

  for(int i = 0; i < n; ++i){
    finalHeight[i] = get(0, n-1, i, 1);
  }
  return;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...