답안 #987393

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
987393 2024-05-22T16:58:54 Z yeediot 늑대인간 (IOI18_werewolf) C++17
컴파일 오류
0 ms 0 KB
#pragma GCC optimize("O2")
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define pb push_back
#define sz(x) (int)(x.size())
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
#define vi vector<int>
#define vp vector<pii>
#define vvi vector<vi>
#define ykh mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count())
#define __lg(x) 63-__builtin_clzll(x)
#define pow2(x) (1LL<<x)
#ifdef local
void setio(){freopen("/Users/iantsai/Library/Mobile Documents/com~apple~CloudDocs/cpp/Empty.md","r",stdin);}
#else
#include "werewolf.h"
void setio(){}
#endif
#define why_TOI_is_so_de ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);setio();
const int mxn=2e5+5;
int n;
vector<int>adj2[mxn];
struct DSU{
    vector<int>to;
    void init(){
        to.resize(n+1);
        for(int i=0;i<=n;i++){
            to[i]=i;
        }
    }
    int find(int x){
        return x==to[x]?x:to[x]=find(to[x]);
    }
}d;
struct tree{
    vector<vector<int>>adj,jump;
    vector<tuple<int,int,int>>edges;
    int flg, timer, in[mxn], out[mxn], ord[mxn];
    void init(int f){
        adj.resize(n+1);
        flg=f;
        jump.resize(20,vector<int>(n+1));
    }
    void dfs(int v,int pa){
        in[v]=++timer;
        ord[timer]=v;
        jump[0][v]=pa;
        for(auto u:adj[v]){
            if(u!=pa)dfs(u,v);
        }
        out[v]=timer;
    }
    void build(){
        for(int i=1;i<20;i++){
            for(int j=1;j<=n;j++){
                jump[i][j]=jump[i-1][jump[i-1][j]];
            }
        }
    }
    int find(int st,int x){
        if(flg){
            for(int i=19;i>=0;i--){
                if(jump[i][st]<=x){
                    st=jump[i][st];
                }
            }
        }
        else{
            for(int i=19;i>=0;i--){
                if(jump[i][st]>=x){
                    st=jump[i][st];
                }
            }
        }
        return st;
    }
}mn, mx;
vector<int>upd(mxn),ans;
vector<tuple<int,int,int,int>>in[mxn];
int bit[mxn];
void modify(int p){
    for(;p<=n;p+=p&-p){
        bit[p]++;
    }
}
int query(int p){
    int res=0;
    for(;p;p-=p&-p){
        res+=bit[p];
    }
    return res;
}
vi check_validity(int N,vi X,vi Y,vi S,vi E,vi L,vi R){
    why_TOI_is_so_de;
    n=N;
    ans.resize(sz(E));
    for(int i=0;i<sz(X);i++){
        int a=X[i],b=Y[i];
        a++;
        b++;
        adj2[a].pb(b);
        adj2[b].pb(a);
    }
    mn.init(1);
    mx.init(0);
    d.init();
    for(int x=n;x>=1;x--){
        for(auto y:adj2[x]){
            if(y<x)continue;
            int fx=d.find(y),fy=d.find(x);
            if(fx==fy)continue;
            mx.adj[fy].pb(fx);
            d.to[fx]=fy;
        }
    }
    d.init();
    for(int x=1;x<=n;x++){
        for(auto y:adj2[x]){
            if(y>x)continue;
            int fx=d.find(y),fy=d.find(x);
            if(fx==fy)continue;
            mn.adj[fy].pb(fx);
            d.to[fx]=fy;
        }
    }
    mn.dfs(n,n);
    mx.dfs(1,1);
    mn.build();
    mx.build();
    for(int i=1;i<=n;i++){
        upd[i]=mn.in[mx.ord[i]];
    }
    for(int i=0;i<sz(S);i++){
        int s=S[i]+1,e=E[i]+1,l=L[i]+1,r=R[i]+1;
        int fs=mx.find(s,l),se=mn.find(e,r);
        S[i]=se;
        in[mx.in[fs]-1].pb({i,-1});
        in[mx.out[fs]].pb({i,1});
    }
    for(int i=1;i<=n;i++){
        modify(upd[i]);
        for(auto [id,flg]:in[i]){
            ans[id]+=flg*(query(mn.out[S[id]])-query(mn.in[S[id]]-1));
        }
    }
    for(int i=0;i<sz(E);i++){
        if(ans[i])ans[i]=1;
    }
    return ans;
}

Compilation message

werewolf.cpp: In function 'std::vector<int> check_validity(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
werewolf.cpp:142:34: error: no matching function for call to 'std::vector<std::tuple<int, int, int, int> >::push_back(<brace-enclosed initializer list>)'
  142 |         in[mx.in[fs]-1].pb({i,-1});
      |                                  ^
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/c++/10/functional:62,
                 from /usr/include/c++/10/pstl/glue_algorithm_defs.h:13,
                 from /usr/include/c++/10/algorithm:74,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from werewolf.cpp:2:
/usr/include/c++/10/bits/stl_vector.h:1187:7: note: candidate: 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::vector<_Tp, _Alloc>::value_type = std::tuple<int, int, int, int>]'
 1187 |       push_back(const value_type& __x)
      |       ^~~~~~~~~
/usr/include/c++/10/bits/stl_vector.h:1187:35: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const value_type&' {aka 'const std::tuple<int, int, int, int>&'}
 1187 |       push_back(const value_type& __x)
      |                 ~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_vector.h:1203:7: note: candidate: 'void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::vector<_Tp, _Alloc>::value_type = std::tuple<int, int, int, int>]'
 1203 |       push_back(value_type&& __x)
      |       ^~~~~~~~~
/usr/include/c++/10/bits/stl_vector.h:1203:30: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::vector<std::tuple<int, int, int, int> >::value_type&&' {aka 'std::tuple<int, int, int, int>&&'}
 1203 |       push_back(value_type&& __x)
      |                 ~~~~~~~~~~~~~^~~
werewolf.cpp:143:32: error: no matching function for call to 'std::vector<std::tuple<int, int, int, int> >::push_back(<brace-enclosed initializer list>)'
  143 |         in[mx.out[fs]].pb({i,1});
      |                                ^
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/c++/10/functional:62,
                 from /usr/include/c++/10/pstl/glue_algorithm_defs.h:13,
                 from /usr/include/c++/10/algorithm:74,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from werewolf.cpp:2:
/usr/include/c++/10/bits/stl_vector.h:1187:7: note: candidate: 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::vector<_Tp, _Alloc>::value_type = std::tuple<int, int, int, int>]'
 1187 |       push_back(const value_type& __x)
      |       ^~~~~~~~~
/usr/include/c++/10/bits/stl_vector.h:1187:35: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const value_type&' {aka 'const std::tuple<int, int, int, int>&'}
 1187 |       push_back(const value_type& __x)
      |                 ~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_vector.h:1203:7: note: candidate: 'void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::vector<_Tp, _Alloc>::value_type = std::tuple<int, int, int, int>]'
 1203 |       push_back(value_type&& __x)
      |       ^~~~~~~~~
/usr/include/c++/10/bits/stl_vector.h:1203:30: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::vector<std::tuple<int, int, int, int> >::value_type&&' {aka 'std::tuple<int, int, int, int>&&'}
 1203 |       push_back(value_type&& __x)
      |                 ~~~~~~~~~~~~~^~~
werewolf.cpp:147:18: error: only 2 names provided for structured binding
  147 |         for(auto [id,flg]:in[i]){
      |                  ^~~~~~~~
werewolf.cpp:147:18: note: while 'std::tuple<int, int, int, int>' decomposes into 4 elements