Submission #889097

# Submission time Handle Problem Language Result Execution time Memory
889097 2023-12-18T20:33:52 Z Nelt Wall (IOI14_wall) C++17
100 / 100
614 ms 194328 KB
#include "wall.h"
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,avx2,fma")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

/* DEFINES */
#define S second
#define F first
#define ll long long
#define ull unsigned long long
#define ld long double
#define npos ULLONG_MAX
#define INF LLONG_MAX
#define vv(a) vector<a>
#define pp(a, b) pair<a, b>
#define pq(a) priority_queue<a>
#define qq(a) queue<a>
#define ss(a) set<a>
#define mm(a, b) map<a, b>
#define ump(a, b) unordered_map<a, b>
#define ANDROID                   \
    ios_base::sync_with_stdio(0); \
    cin.tie(0);                   \
    cout.tie(0);
#define elif else if
#define endl "\n"
#define allc(a) begin(a), end(a)
#define all(a) a, a + sizeof(a) / sizeof(a[0])
#define pb push_back
#define logi(a) __lg(a)
#define sqrt(a) sqrtl(a)
#define mpr make_pair
#define ins insert
using namespace std;
using namespace __gnu_pbds;
using namespace __cxx11;
typedef char chr;
typedef basic_string<chr> str;
template <typename T, typename key = less<T>>
using ordered_set = tree<T, null_type, key, rb_tree_tag, tree_order_statistics_node_update>;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const ll N = 2e6 + 5;
pp(ll, ll) lazy[N << 2], ans[N];
bool leaf[N << 2];
void push(ll v, ll l, ll r)
{
    if (l == r)
        return;
    if (lazy[v].F > lazy[v << 1].S)
        lazy[v << 1] = {lazy[v].F, lazy[v].F};
    elif (lazy[v].S < lazy[v << 1].F)
        lazy[v << 1] = {lazy[v].S, lazy[v].S};
    else lazy[v << 1].F = max(lazy[v].F, lazy[v << 1].F), lazy[v << 1].S = min(lazy[v << 1].S, lazy[v].S);
    if (lazy[v].F > lazy[v << 1 | 1].S)
        lazy[v << 1 | 1] = {lazy[v].F, lazy[v].F};
    elif (lazy[v].S < lazy[v << 1 | 1].F)
        lazy[v << 1 | 1] = {lazy[v].S, lazy[v].S};
    else lazy[v << 1 | 1].F = max(lazy[v].F, lazy[v << 1 | 1].F), lazy[v << 1 | 1].S = min(lazy[v << 1 | 1].S, lazy[v].S);
    lazy[v] = {0ll, (ll)1e9};
}
void modifymin(ll i, ll j, ll val, ll l, ll r, ll v)
{
    if (max(i, l) > min(j, r))
        return;
    push(v, l, r);
    if (i <= l and r <= j)
    {
        // lazy[v].S = min(lazy[v].S, val);
        // if (lazy[v].F > lazy[v].S)
        //     lazy[v].F = lazy[v].S;
        if (!leaf[v])
            lazy[v] = {0ll, val},
            push(v, l, r);
        else
            lazy[v] = mpr(min(val, lazy[v].F), min(val, lazy[v].S));
        return;
    }
    ll mid = (l + r) >> 1;
    modifymin(i, j, val, l, mid, v << 1);
    modifymin(i, j, val, mid + 1, r, v << 1 | 1);
}
void modifymax(ll i, ll j, ll val, ll l, ll r, ll v)
{
    if (max(i, l) > min(j, r))
        return;
    push(v, l, r);
    if (i <= l and r <= j)
    {
        // lazy[v].F = max(lazy[v].F, val);
        // if (lazy[v].F > lazy[v].S)
        //     lazy[v].S = lazy[v].F;
        if (!leaf[v])
            lazy[v] = {val, (ll)1e9},
            push(v, l, r);
        else
            lazy[v] = mpr(max(lazy[v].F, val), max(lazy[v].S, val));
        return;
    }
    ll mid = (l + r) >> 1;
    modifymax(i, j, val, l, mid, v << 1);
    modifymax(i, j, val, mid + 1, r, v << 1 | 1);
}
void build(ll l, ll r, ll v)
{
    if (l == r)
    {
        ans[l] = lazy[v];
        return;
    }
    ll mid = (l + r) >> 1;
    push(v, l, r);
    build(l, mid, v << 1);
    build(mid + 1, r, v << 1 | 1);
}
void init(ll l, ll r, ll v)
{
    if (l == r)
    {
        leaf[v] = 1;
        ans[v] = mpr(0, 0);
        return;
    }
    ll mid = (l + r) >> 1;
    init(l, mid, v << 1);
    init(mid + 1, r, v << 1 | 1);
}
void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[])
{
    for (ll i = 0; i <= (n << 2); i++)
        lazy[i] = mpr(0, 1e9);
    init(0, n - 1, 1);
    for (ll i = 0; i < k; i++)
        if (op[i] == 1)
            modifymax(left[i], right[i], height[i], 0, n - 1, 1);
        else
            modifymin(left[i], right[i], height[i], 0, n - 1, 1);
    build(0, n - 1, 1);
    for (ll i = 0; i < n; i++)
        finalHeight[i] = ans[i].F;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4440 KB Output is correct
2 Correct 2 ms 4440 KB Output is correct
3 Correct 2 ms 4444 KB Output is correct
4 Correct 6 ms 6744 KB Output is correct
5 Correct 4 ms 6748 KB Output is correct
6 Correct 6 ms 6860 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 100 ms 15820 KB Output is correct
3 Correct 127 ms 14196 KB Output is correct
4 Correct 388 ms 32864 KB Output is correct
5 Correct 203 ms 33108 KB Output is correct
6 Correct 229 ms 32688 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4440 KB Output is correct
2 Correct 2 ms 4444 KB Output is correct
3 Correct 2 ms 4444 KB Output is correct
4 Correct 6 ms 6748 KB Output is correct
5 Correct 4 ms 7000 KB Output is correct
6 Correct 4 ms 6796 KB Output is correct
7 Correct 1 ms 4444 KB Output is correct
8 Correct 99 ms 15828 KB Output is correct
9 Correct 133 ms 14416 KB Output is correct
10 Correct 369 ms 32892 KB Output is correct
11 Correct 213 ms 33248 KB Output is correct
12 Correct 196 ms 32600 KB Output is correct
13 Correct 1 ms 4440 KB Output is correct
14 Correct 100 ms 15492 KB Output is correct
15 Correct 38 ms 9808 KB Output is correct
16 Correct 524 ms 32988 KB Output is correct
17 Correct 236 ms 32484 KB Output is correct
18 Correct 200 ms 32508 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4640 KB Output is correct
2 Correct 2 ms 4560 KB Output is correct
3 Correct 2 ms 4444 KB Output is correct
4 Correct 6 ms 6864 KB Output is correct
5 Correct 4 ms 6744 KB Output is correct
6 Correct 4 ms 6792 KB Output is correct
7 Correct 1 ms 4444 KB Output is correct
8 Correct 106 ms 15684 KB Output is correct
9 Correct 127 ms 14164 KB Output is correct
10 Correct 367 ms 32736 KB Output is correct
11 Correct 216 ms 33108 KB Output is correct
12 Correct 195 ms 32736 KB Output is correct
13 Correct 1 ms 4440 KB Output is correct
14 Correct 109 ms 15700 KB Output is correct
15 Correct 32 ms 9772 KB Output is correct
16 Correct 566 ms 33004 KB Output is correct
17 Correct 201 ms 32596 KB Output is correct
18 Correct 218 ms 32484 KB Output is correct
19 Correct 561 ms 193956 KB Output is correct
20 Correct 577 ms 191776 KB Output is correct
21 Correct 539 ms 193960 KB Output is correct
22 Correct 614 ms 191568 KB Output is correct
23 Correct 538 ms 191644 KB Output is correct
24 Correct 564 ms 191604 KB Output is correct
25 Correct 554 ms 191640 KB Output is correct
26 Correct 561 ms 193956 KB Output is correct
27 Correct 603 ms 194328 KB Output is correct
28 Correct 535 ms 191584 KB Output is correct
29 Correct 539 ms 191676 KB Output is correct
30 Correct 585 ms 191656 KB Output is correct