Submission #586548

#TimeUsernameProblemLanguageResultExecution timeMemory
586548LastRoninWall (IOI14_wall)C++14
Compilation error
0 ms0 KiB
#include "wall.h"  
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define f first
#define s second
#define ll long long
#define mp make_pair

const int N = 5e5 + 10;

ll K;

struct seg {
	ll t[4 * N] = {0};
	ll t2[4 * N] = {0};
	void upd1(ll p, ll z, ll v = 1, ll tl = 1, ll tr = K) {
		if(tl == tr) {
			t[v] = z;
			return;
		}          
		ll m = (tl + tr) >> 1ll;
		if(p <= m)upd1(p, z, v * 2, tl, m);
		else upd1(p, z, v * 2 + 1, m + 1, tr);
		t[v] = max(t[v * 2], t[v * 2 + 1]);
	}
	void upd2(ll p, ll z, ll v = 1, ll tl = 1, ll tr = K) {
		if(tl == tr) {
			t2[v] = z;
			return;   
		}          
		ll m = (tl + tr) >> 1ll;
		if(p <= m)upd2(p, z, v * 2, tl, m);
		else upd2(p, z, v * 2 + 1, m + 1, tr);
		t2[v] = min(t2[v * 2], t2[v * 2 + 1]);
	}
	ll get(ll x, ll y, ll v = 1, ll tl = 1, ll tr = K) {
		if(tl == tr) {
		    if(y == t2[v])return x;
		    else return y;
		}
		ll m = (tl + tr) >> 1ll;
		ll a = max(x, t[v * 2 + 1]);
		ll b = min(y, t2[v * 2 + 1]);
		if(a >= b)
			return get(x, y, v * 2 + 1, m + 1, tr);
		return get(a, b, v * 2, tl, m); 
	}
} rt;

void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){
    vector<int> g[n + 1];
    K = k;
    for(int i = 0; i < k; i++) {
    	g[left[i]].pb(i);
		g[right[i] + 1].pb(i);
		rt.upd2(i + 1, 1e9);
		rt.upd1(i + 1, 0);
    }
    for(int i = 0; i < n; i++) {
//    	cout << i << "\n";
    	for(auto u : g[i]) {
    		if(left[u] == i) {
    			if(op[u] == 1) rt.upd1(u + 1, height[u]);
    			if(op[u] == 2) rt.upd2(u + 1, height[u]);
  //  			cout << "+ " << u << "\n";
    		} else {
//    			cout << "- " << u << "\n";
    			if(op[u] == 1) rt.upd1(u + 1, 0);
    			if(op[u] == 2) rt.upd2(u + 1, 1e9);
    		}
    	}
		//if(i == 3)cout << "________________________";
    	finalHeight[i] = rt.get(0, 1e9);
    	//if(i == 3)cout << "________________________";

    }
	return;
}

int main()
{
  int n;
  int k;

  int i, j;  
  int status = 0;

  status = scanf("%d%d", &n, &k);
  assert(status == 2);

  int* op = (int*)calloc(sizeof(int), k);
  int* left = (int*)calloc(sizeof(int), k);
  int* right = (int*)calloc(sizeof(int), k);
  int* height = (int*)calloc(sizeof(int), k);
  int* finalHeight = (int*)calloc(sizeof(int), n);

  for (i = 0; i < k; i++){
    status = scanf("%d%d%d%d", &op[i], &left[i], &right[i], &height[i]);
    assert(status == 4);
  }

  buildWall(n, k, op, left, right, height, finalHeight);

  for (j = 0; j < n; j++)
    printf("%d\n", finalHeight[j]);
  
  return 0;
}
/*
10 3
1 3 4 91220
1 5 9 48623
2 3 5 39412
*/

Compilation message (stderr)

/usr/bin/ld: /tmp/ccszJXRg.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccXgDFSd.o:wall.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status