Submission #1223172

#TimeUsernameProblemLanguageResultExecution timeMemory
1223172fermatWall (IOI14_wall)C++20
100 / 100
1096 ms89424 KiB
#include "wall.h"
#include <bits/stdc++.h>

using namespace std;

const int N = 2e6 + 5; 

int mx[N * 4], mn[N * 4], n;

void upd (int v, int val, int t) {
 if (t == 1) {
  mn[v] = max(mn[v], val);
  mx[v] = max(mx[v], val);
 }
 else {
  mn[v] = min(mn[v], val);
  mx[v] = min(mx[v], val);
 }
}
void push (int v) {
 upd(v + v, mx[v], 1);
 upd(v + v, mn[v], 2);
 upd(v + v + 1, mx[v], 1);
 upd(v + v + 1, mn[v], 2);
 mx[v] = 0;
 mn[v] = 1e9;
}
void update (int l, int r, int val, int t, int v = 1, int tl = 1, int tr = n) {
 if (l > tr || tl > r)
  return;
  
 if (l <= tl && tr <= r) {
  upd(v, val, t);
  return;
 }
 push(v);
 int tm = (tl + tr) >> 1;
 update(l, r, val, t, v + v, tl, tm);
 update(l, r, val, t, v + v + 1, tm + 1, tr);
}
int get (int pos, int v = 1, int tl = 1, int tr = n) {
 if (tl == tr)
  return mx[v];
 push(v); 
 int tm = (tl + tr) >> 1;
 
 if (pos <= tm)
  return get(pos, v + v, tl, tm);
 return get(pos, v + v + 1, tm + 1, tr);
}
void buildWall(int N, int k, int op[], int l[], int r[], int a[], int ans[]) { 
 n = N;
 
 memset(mn, 0x3f3f3f3f, sizeof(mn));
 memset(mx, 0, sizeof(mx));
 for (int i = 0; i < k; i++) {
  update( l[i] + 1, r[i] + 1, a[i], op[i] );  
 }
 for (int i = 0; i < n; i++) {
  ans[i] = get(i + 1);
 }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...