Submission #672376

#TimeUsernameProblemLanguageResultExecution timeMemory
672376bLICWall (IOI14_wall)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>

// using namespace __gnu_pbds;
using namespace std;

// typedef tree<int,null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;


#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sz(x) (int)(x).size()
#define ft first
#define sd second
#define pb push_back
#define endl '\n'

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<pii> vii;
typedef vector<ll> vl;
typedef vector<pll> vll;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
typedef vector<vl> vvl;

#define dbg if(0)

const ll MOD = 998244353;
const ll INFLL = 1e18;
const int INF = 1e9;
const int maxN = 2e5+6;
const int maxK = 10;

void printbit(int x, int len) {string s="\n";while(len--){s=((x%2)?'1':'0')+s;x/=2;} cout<<s;}


#define gbit(x, i) (((1<<i)&(x))!=0)

template <typename T>
class MINT{
    T x;
    public:
    static T MOD;
    MINT(T _x){x = (_x%MOD+MOD)%MOD;}
    MINT():MINT(0){}
    explicit operator ll(){return x;}
    friend MINT operator+(const MINT& m1, const MINT& m2){return MINT((m1.x + m2.x)%MOD);};
    friend MINT operator-(const MINT& m1, const MINT& m2){return MINT(((m1.x - m2.x)%MOD + MOD)%MOD);};
    friend MINT operator*(const MINT& m1, const MINT& m2){return MINT((m1.x * m2.x)%MOD);};
    MINT& operator+=(const MINT& m2){return *this = *this + m2;};
    MINT& operator-=(const MINT& m2){return *this = *this - m2;};
    MINT& operator*=(const MINT& m2){return *this = *this * m2;};
    friend bool operator==(const MINT& m1, const MINT& m2){return m1.x==m2.x;};
    friend istream& operator>>(istream& in, const MINT& m){in>>m.x;return in;};
    friend ostream& operator<<(ostream& out, const MINT& m){out<<m.x;return out;};
};
template <typename T>
T MINT<T>::MOD = 998244353;

typedef MINT<ll> mll;

typedef pair<mll, mll> pmll;

#define lt(x) ((x)<<1)
#define rt(x) ((x)<<1|1)


struct Node {
    ll h, mx, mn;
    Node(ll x):h(x), mx(-1), mn(-1){}
    Node():Node(0){}
};

vector<Node> tree;
int n;
void init(int _n){
    n = 1;
    while(n<_n) n<<=1;
    tree.assign(2*n, Node());
}


void pushdown(int x, int lx, int mid, int rx){
    if (x>=n) return;
    if (tree[x].mx!=-1){
        tree[lt(x)].h = min(tree[lt(x)].h, tree[x].mx);
        tree[rt(x)].h = min(tree[rt(x)].h, tree[x].mx);
    }else if (tree[x].mn!=-1){
        tree[lt(x)].h = max(tree[lt(x)].h, tree[x].mn);
        tree[rt(x)].h = max(tree[rt(x)].h, tree[x].mn);
    }
    tree[x].mn = tree[x].mx = -1;
}

void build(vector<ll>& v){
    for (int i = 0;i<sz(v);i++) tree[i+n] = v[i];
    for (int i = n-1;i>0;i--) pushup(i);
}
void updatemx(int l, int r, int x, int lx, int rx, ll val){
    if (l<=lx && rx<=r) {
        pushdown(x);
        tree[x].h = min(tree[x].h, val);
        tree[x].mx = val;
        return;
    }
    if (l>=rx || r<=lx) return;
    int m = (lx+rx)/2;
    pushdown(x, lx, m, rx);
    updatemx(l, r, lt(x), lx, m, val);
    updatemx(l, r, rt(x), m, rx, val);
    pushup(x);
}

void updatemx(int l, int r, ll val){
    updatemx(l, r, 1, 0, n, val);
}
void updatemn(int l, int r, int x, int lx, int rx, ll val){
    if (l<=lx && rx<=r) {
        pushdown(x);
        tree[x].h = max(tree[x].h, val);
        tree[x].mx = val;
        return;
    }
    if (l>=rx || r<=lx) return;
    int m = (lx+rx)/2;
    pushdown(x, lx, m, rx);
    updatemn(l, r, lt(x), lx, m, val);
    updatemn(l, r, rt(x), m, rx, val);
    pushup(x);
}

void updatemn(int l, int r, ll val){
    updatemn(l, r, 1, 0, n, val);
}

// ll querysm(int l, int r, int x, int lx, int rx){
//     if (l<=lx && rx<=r) return tree[x].s;
//     else if (l>=rx || r<=lx) return 0;
//     else {
//         int m = (lx+rx)/2;
//         pushdown(x, lx, m, rx);
//         return (querysm(l, r, lt(x), lx, m)+querysm(l,r , rt(x), m, rx));
//     }
// }

// ll querysm(int l, int r){
//     return querysm(l, r, 1, 0, n);
// }

// ll querymin(int l, int r, int x, int lx, int rx){
//     if (l<=lx && rx<=r) return tree[x].m;
//     else if (l>=rx || r<=lx) return -INFLL;
//     else {
//         int m = (lx+rx)/2;
//         pushdown(x, lx, m, rx);
//         return max(querymin(l, r, lt(x), lx, m), querymin(l, r, rt(x), m, rx));
//     }
// }

// ll querymin(int l, int r){
//     return querymin(l, r, 1, 0, n);
// }

template <class T>
istream& operator>>(istream& in, vector<T>& v){
    for (T& x:v) in>>x;
    return in;
}

void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){
    init(n);
    vi h(n);
    // for (int i = 0;i<n;i++) h[i] = height[i];
    build(h);
    for (int i = 0;i<k;i++){
        if (op[i]==1) updatemn(left[i], right[i], height[i]);
        else updatemx(left[i], right[i], height[i]);
    }
    for (int i = 0;i<n;i++) finalHeight[i] = tree[i+::n].h;
}


// void solve(){
    
   
// }


// int main() {
//     ios_base::sync_with_stdio(false);
//     cin.tie(nullptr);
//     cout.tie(nullptr);
// // #define _DEBUG
// #ifdef _DEBUG
// 	freopen("haybales.in", "r", stdin);
// 	freopen("haybales.out", "w", stdout);
// 	int tt = clock();
// #endif
//     int t=1, i = 1;
//     // cin>>t;
//     while(t--){
//         // cout<<"Case #"<<i++<<": ";
//         solve();
//         // cout<<'\n';
//     }
// #ifdef _DEBUG
//     cerr << "TIME = " << (float)(clock() - tt)/CLOCKS_PER_SEC << endl;
//     tt = clock();
// #endif
// }

Compilation message (stderr)

wall.cpp: In function 'void build(std::vector<long long int>&)':
wall.cpp:101:31: error: 'pushup' was not declared in this scope
  101 |     for (int i = n-1;i>0;i--) pushup(i);
      |                               ^~~~~~
wall.cpp: In function 'void updatemx(int, int, int, int, int, ll)':
wall.cpp:105:19: error: too few arguments to function 'void pushdown(int, int, int, int)'
  105 |         pushdown(x);
      |                   ^
wall.cpp:87:6: note: declared here
   87 | void pushdown(int x, int lx, int mid, int rx){
      |      ^~~~~~~~
wall.cpp:115:5: error: 'pushup' was not declared in this scope
  115 |     pushup(x);
      |     ^~~~~~
wall.cpp: In function 'void updatemn(int, int, int, int, int, ll)':
wall.cpp:123:19: error: too few arguments to function 'void pushdown(int, int, int, int)'
  123 |         pushdown(x);
      |                   ^
wall.cpp:87:6: note: declared here
   87 | void pushdown(int x, int lx, int mid, int rx){
      |      ^~~~~~~~
wall.cpp:133:5: error: 'pushup' was not declared in this scope
  133 |     pushup(x);
      |     ^~~~~~
wall.cpp: In function 'void buildWall(int, int, int*, int*, int*, int*, int*)':
wall.cpp:178:11: error: invalid initialization of reference of type 'std::vector<long long int>&' from expression of type 'vi' {aka 'std::vector<int>'}
  178 |     build(h);
      |           ^
wall.cpp:99:24: note: in passing argument 1 of 'void build(std::vector<long long int>&)'
   99 | void build(vector<ll>& v){
      |            ~~~~~~~~~~~~^