Submission #1021106

#TimeUsernameProblemLanguageResultExecution timeMemory
1021106JakobZorzWerewolf (IOI18_werewolf)C++17
Compilation error
0 ms0 KiB
#include"werewolf.h" #include<queue> #include<iostream> #include<set> #include<algorithm> using namespace std; int n,m,q; vector<int>nodes[200000]; struct RMQ{ vector<vector<int>>table; vector<int>lg2; int n; RMQ(vector<int>arr){ n=(int)arr.size(); table=vector<vector<int>>(20,vector<int>(n)); int curr=1; lg2=vector<int>(n+1); for(int i=2;i<=n;i++){ while((1<<curr)<=i) curr++; lg2[i]=curr-1; } table[0]=arr; for(int p=1;p<20;p++){ for(int i=0;i+(1<<p)<=n;i++){ table[p][i]=max(table[p-1][i],table[p-1][i+(1<<(p-1))]); } } } int get(int l,int r){ if(l==r) return 0; int lg=lg2[r-l]; return max(table[lg][l],table[lg][r-(1<<lg)]); } }; struct Query{ int S,E,L,R; int ans; }; bool cmp(Query*a,Query*b){ return a->L>b->L; } vector<int>check_validity(int N,vector<int>X,vector<int>Y,vector<int>S,vector<int>E,vector<int>L,vector<int>R){ n=N; m=(int)X.size(); q=(int)S.size(); for(int i=0;i<n;i++){ nodes[i].clear(); } for(int i=0;i<m;i++){ nodes[X[i]].push_back(Y[i]); nodes[Y[i]].push_back(X[i]); } vector<int>line; { vector<int>comp(n); vector<deque<int>>comps(n); for(int i=0;i<n;i++){ set<int>to_add; int curr_comp=i; comps[i]=i; for(int ne:nodes[i]){ if(ne>i) continue; to_add.insert(comp[ne]); } for(int j:to_add){ comps[i].insert(comps[i].end(),comps[j].begin(),comps[j].end()); for(int k:comps[j]) comp[k]=curr_comp; comps[i].push_back(i); } comps[i].push_front(i); } line=vector<int>(comps[comp[0]].begin(),comps[comp[0]].end()); } vector<int>to_line(n); for(int i=0;i<(int)line.size();i++){ to_line[line[i]]=i; } RMQ rmq=RMQ(line); /*for(int i:line) cout<<i<<" "; cout<<"\n";*/ vector<Query*>qrs(q); for(int i=0;i<q;i++){ qrs[i]=new Query; qrs[i]->S=S[i]; qrs[i]->E=E[i]; qrs[i]->L=L[i]; qrs[i]->R=R[i]; qrs[i]->ans=0; } vector<Query*>srt=qrs; sort(srt.begin(),srt.end(),cmp); vector<int>comp(n); vector<vector<int>>comps(n); vector<set<int>>comps_line(n); int r=n-1; for(auto qry:srt){ while(r>=qry->L){ comp[r]=r; comps[r]={r}; comps_line[r].insert(to_line[r]); for(int ne:nodes[r]){ if(ne<r) continue; if(comp[ne]!=comp[r]){ comps[comp[r]].insert(comps[comp[r]].end(),comps[comp[ne]].begin(),comps[comp[ne]].end()); for(int i:comps_line[comp[ne]]) comps_line[r].insert(i); for(int i:comps[comp[r]]) comp[i]=comp[r]; } } r--; } int rl,rr; /*for(int j=0;j<(int)line.size();j++){ if(line[j]==qry->E){ //for(rr=j;rr<(int)line.size()&&line[rr]<=qry->R;rr++); //for(rl=j;rl>=0&&line[rl]<=qry->R;rl--); break; } }*/ { int i=to_line[qry->E]; int l=i,r=(int)line.size(); while(l<r-1){ int mid=(l+r)/2; if(rmq.get(i,mid+1)<=qry->R) l=mid; else r=mid; } rr=r; } { int i=to_line[qry->E]; int l=0,r=i; while(l<r-1){ int mid=(l+r)/2; if(rmq.get(mid,i)<=qry->R) r=mid; else l=mid; } rl=l; } auto iter=comps_line[comp[qry->S]].lower_bound(rl+1); if(iter!=comps_line[comp[qry->S]].end()&&*iter<rr) qry->ans=1; /*for(int i:comps_line[comp[qry->S]]){ if(rl<i&&i<rr) qry->ans=1; }*/ } vector<int>res(q); for(int i=0;i<q;i++) res[i]=qrs[i]->ans; return res; }

Compilation message (stderr)

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:70:22: error: no match for 'operator=' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<std::deque<int> >, std::deque<int> >::value_type' {aka 'std::deque<int>'} and 'int')
   70 |             comps[i]=i;
      |                      ^
In file included from /usr/include/c++/10/deque:69,
                 from /usr/include/c++/10/queue:60,
                 from werewolf.cpp:2:
/usr/include/c++/10/bits/deque.tcc:95:5: note: candidate: 'std::deque<_Tp, _Alloc>& std::deque<_Tp, _Alloc>::operator=(const std::deque<_Tp, _Alloc>&) [with _Tp = int; _Alloc = std::allocator<int>]'
   95 |     deque<_Tp, _Alloc>::
      |     ^~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/deque.tcc:96:28: note:   no known conversion for argument 1 from 'int' to 'const std::deque<int>&'
   96 |     operator=(const deque& __x)
      |               ~~~~~~~~~~~~~^~~
In file included from /usr/include/c++/10/deque:67,
                 from /usr/include/c++/10/queue:60,
                 from werewolf.cpp:2:
/usr/include/c++/10/bits/stl_deque.h:1028:7: note: candidate: 'std::deque<_Tp, _Alloc>& std::deque<_Tp, _Alloc>::operator=(std::deque<_Tp, _Alloc>&&) [with _Tp = int; _Alloc = std::allocator<int>]'
 1028 |       operator=(deque&& __x) noexcept(_Alloc_traits::_S_always_equal())
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_deque.h:1028:25: note:   no known conversion for argument 1 from 'int' to 'std::deque<int>&&'
 1028 |       operator=(deque&& __x) noexcept(_Alloc_traits::_S_always_equal())
      |                 ~~~~~~~~^~~
/usr/include/c++/10/bits/stl_deque.h:1047:7: note: candidate: 'std::deque<_Tp, _Alloc>& std::deque<_Tp, _Alloc>::operator=(std::initializer_list<_Tp>) [with _Tp = int; _Alloc = std::allocator<int>]'
 1047 |       operator=(initializer_list<value_type> __l)
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_deque.h:1047:46: note:   no known conversion for argument 1 from 'int' to 'std::initializer_list<int>'
 1047 |       operator=(initializer_list<value_type> __l)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~