제출 #1323483

#제출 시각아이디문제언어결과실행 시간메모리
1323483aryanCurtains (NOI23_curtains)C++20
컴파일 에러
0 ms0 KiB
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")


#include<bits/stdc++.h>
using namespace std;

using i64 = long long;
const int inf = 1e9;

struct Vertex{
    Vertex () {}
    Vertex* l;
    Vertex* r;
    int v;
    int lz;
};

Vertex* build(int nl,int nr){
    if(nl == nr){
        Vertex* nv = new Vertex();
        nv->v = inf;
        nv->lz = inf;
        return nv;
        // return new Vertex(a[nl]);
    }else{
        int mid = (nl + nr) / 2;
        Vertex* nv = new Vertex();
        nv-> l = build(nl,mid);
        nv-> r = build(mid + 1,nr);
        nv->v = max(nv->l->v,nv->r->v);
        nv->lz = inf;
        return nv;
        // return new Vertex(build(nl,mid,a),build(mid + 1,nr,a));
    }
}

Vertex* update(Vertex* v,int nl,int nr,int &l,int &r){
    if(nl > r || l > nr) return nullptr;
    if(l <= nl && r >= nr){
        Vertex* nv = new Vertex();
        nv->l = v->l;
        nv->r = v->r;
        nv->v = min(r,v->v);
        nv->lz = min(v->lz,r);
        return nv;
    }
    int mid = (nl + nr) / 2;
    Vertex* nv = new Vertex();
    nv->lz = v->lz;
    Vertex *nle = update(v->l,nl,mid,l,r);
    Vertex *nre = update(v->r,mid + 1,nr,l,r);
    if(nle != nullptr){
        nv->l = nle;
    }else{
        nv->l = v->l;
    }
    if(nre != nullptr){
        nv->r = nre;
    }else{
        nv->r = v->r;
    }
    nv->v = min(v->v,max(nv->l->v,nv->r->v));
    return nv;
}

int mini = inf;
int query(Vertex* v,int nl,int nr,int &l,int &r){
    if(nl > r || l > nr) return 0;
    if(l <= nl && r >= nr){
        return min(mini,v->v);
    }
    int mid = (nl + nr) / 2;
    int tm = mini;
    mini = min(mini,v->lz);
    int a = query(v->l,nl,mid,l,r);
    int b = query(v->r,mid + 1,nr,l,r);
    mini = tm;
    return max(a,b);
}

struct Data{
    Data () {};
    int l,r,i;
    bool operator<(Data &d){
        return d.l > this->l;
    }
};

int main(){
        
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n,m,q;
    cin >> n >> m >> q;
    vector<pair<int,int>> rn(m);
    for(int i = 0;i < m;i++){
        cin >> rn[i].first >> rn[i].second;
        rn[i].first --;
        rn[i].second --;
    }
    sort(rn.begin(),rn.end());
    vector<Vertex*> roots;
    roots.push_back(build(0,n));
    for(int i = m - 1;i >= 0;i--){
        roots.push_back(update(roots[m - i - 1],0,n,rn[i].first,rn[i].second));
    }

    vector<Data> que(q);
    for(int i = 0;i < q;i++){
        // cin >> que[i].first >> que[i].second; 
        cin >> que[i].l >> que[i].r;
        que[i].l --;
        que[i].r --;
        que[i].i = i;
    }
    sort(que.begin(),que.end());
    vector<bool> ans(q);
    int j = 0;
    for(int i = 0;i < q;i++){
        while(j < m && rn[j].first < que[i].l){
            j ++;
        }
        mini = inf;
        if(query(roots[m - j],0,n,que[i].l,que[i].r) > que[i].r){
            // cout << "NO\n";
            ans[que[i].i] = false;
        }else{
            // cout << "YES\n";
            ans[que[i].i] = true;
        }
    }
    for(int i = 0;i < q;i++){
        cout << (ans[i] ? "YES\n" : "NO\n");
    }

    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

In file included from /usr/include/c++/13/string:43,
                 from /usr/include/c++/13/bitset:52,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:52,
                 from curtains.cpp:6:
/usr/include/c++/13/bits/allocator.h: In destructor 'constexpr std::_Vector_base<Vertex*, std::allocator<Vertex*> >::_Vector_impl::~_Vector_impl()':
/usr/include/c++/13/bits/allocator.h:184:7: error: inlining failed in call to 'always_inline' 'constexpr std::allocator< <template-parameter-1-1> >::~allocator() noexcept [with _Tp = Vertex*]': target specific option mismatch
  184 |       ~allocator() _GLIBCXX_NOTHROW { }
      |       ^
In file included from /usr/include/c++/13/vector:66,
                 from /usr/include/c++/13/functional:64,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:53:
/usr/include/c++/13/bits/stl_vector.h:133:14: note: called from here
  133 |       struct _Vector_impl
      |              ^~~~~~~~~~~~