Submission #1243344

#TimeUsernameProblemLanguageResultExecution timeMemory
1243344kla3000Wall (IOI14_wall)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> st; vector<int> a; int INF=1000000000;
void build(int ni, int l, int r)
{
    st[ni].first=0; st[ni].second=INF;
    if(l==r){return;}
    int nin=ni *2, m=(l+r)/2;
    build(nin, l, m); build(nin+1, m+1, r);
}
void query(int ni, int l, int r)
{
    if(l==r){a[l]=st[ni].first; return;}
    int nin=ni *2, m=(l+r)/2;
        st[nin].first=max(st[nin].first, st[ni].first);
        st[nin].second=max(st[nin].second, st[ni].first);
        if(st[nin].first>st[nin].second){st[nin] = {st[ni].first, st[ni].first};}
        st[nin].second=min(st[nin].second, st[ni].second);
        st[nin].first=min(st[nin].first, st[ni].second);
        if(st[nin].first>st[nin].second){st[nin] = {st[ni].second, st[ni].second};}
        st[nin+1].first=max(st[nin+1].first, st[ni].first);
        st[nin+1].second=max(st[nin+1].second, st[ni].first);
        if(st[nin+1].first>st[nin+1].second){st[nin+1] = {st[ni].first, st[ni].first};}
        st[nin+1].second=min(st[nin+1].second, st[ni].second);
        st[nin+1].first=min(st[nin+1].first, st[ni].second);
        if(st[nin+1].first>st[nin+1].second){st[nin+1] = {st[ni].second, st[ni].second};}
    query(nin, l, m); query(nin+1, m+1, r);
}
void update(int ni, int l, int r, int x, int y, int u)
{
    int nin=ni*2;
    if(y<l||r<x) return;
    if(x<=l&&r<=y)
    {
        st[ni].first=max(st[ni].first, u); st[ni].second=max(st[ni].second, u); 
        if(st[ni].first>st[ni].second){st[ni].first=u; st[ni].second=u;}
        return;
    }
    if(l==r) return;
        st[nin].first=max(st[nin].first, st[ni].first);
        st[nin].second=max(st[nin].second, st[ni].first);
        if(st[nin].first>st[nin].second){st[nin] = {st[ni].first, st[ni].first};}
        st[nin].second=min(st[nin].second, st[ni].second);
        st[nin].first=min(st[nin].first, st[ni].second);
        if(st[nin].first>st[nin].second){st[nin] = {st[ni].second, st[ni].second};}
        st[nin+1].first=max(st[nin+1].first, st[ni].first);
        st[nin+1].second=max(st[nin+1].second, st[ni].first);
        if(st[nin+1].first>st[nin+1].second){st[nin+1] = {st[ni].first, st[ni].first};}
        st[nin+1].second=min(st[nin+1].second, st[ni].second);
        st[nin+1].first=min(st[nin+1].first, st[ni].second);
        if(st[nin+1].first>st[nin+1].second){st[nin+1] = {st[ni].second, st[ni].second};}    
    int m=(l+r)/2;
    update(nin, l, m, x, y, u); update(nin+1, m+1, r, x, y, u);
}
void updatep(int ni, int l, int r, int x, int y, int u)
{
    int nin=ni*2;
    if(y<l||r<x) return;
    if(x<=l&&r<=y)
    {
        st[ni].first=min(st[ni].first, u); st[ni].second=min(st[ni].second, u); 
        if(st[ni].first>st[ni].second){st[ni].first=u; st[ni].second=u;}
        return;
    }
        st[nin].first=max(st[nin].first, st[ni].first);
        st[nin].second=max(st[nin].second, st[ni].first);
        if(st[nin].first>st[nin].second){st[nin] = {st[ni].first, st[ni].first};}
        st[nin].second=min(st[nin].second, st[ni].second);
        st[nin].first=min(st[nin].first, st[ni].second);
        if(st[nin].first>st[nin].second){st[nin] = {st[ni].second, st[ni].second};}
        st[nin+1].first=max(st[nin+1].first, st[ni].first);
        st[nin+1].second=max(st[nin+1].second, st[ni].first);
        if(st[nin+1].first>st[nin+1].second){st[nin+1] = {st[ni].first, st[ni].first};}
        st[nin+1].second=min(st[nin+1].second, st[ni].second);
        st[nin+1].first=min(st[nin+1].first, st[ni].second);
        if(st[nin+1].first>st[nin+1].second){st[nin+1] = {st[ni].second, st[ni].second};}    
    int m=(l+r)/2;
    updatep(nin, l, m, x, y, u); updatep(nin+1, m+1, r, x, y, u);
}
int main() {
	int n, k; cin>>n>>k; st.assign(4*n+10, {0, 0}); a.assign(n+10, 0);
    build(1, 1, n);
    while(k--)
    {
        int c, x, y, h; cin>>c>>x>>y>>h; if(c==2) updatep(1, 1, n, x, y, h); 
        else update(1, 1, n, x, y, h);
    }
    query(1, 1, n);
    for(int i=1; i<=n; i++)cout<<a[i]<<endl;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccKJFnyA.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccTCuMlV.o:wall.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccKJFnyA.o: in function `main':
grader.cpp:(.text.startup+0x133): undefined reference to `buildWall(int, int, int*, int*, int*, int*, int*)'
collect2: error: ld returned 1 exit status