Submission #611416

#TimeUsernameProblemLanguageResultExecution timeMemory
611416terrasphereWerewolf (IOI18_werewolf)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #include "werewolf.h" using namespace std; vector<vector<int>> edges; vector<int> linear; const int INF=1e9; int index[222222]; int cnt[222222]; bool visited[222222]; bool visited1[3333]; bool visited2[3333]; vector<int> max_tree,min_tree; void init(int node,int start,int end) { if(start==end) { max_tree[node]=linear[start]; min_tree[node]=linear[start]; return; } init(node*2,start,(start+end)/2); init(node*2+1,(start+end)/2+1,end); max_tree[node]=max(max_tree[node*2],max_tree[node*2+1]); min_tree[node]=min(min_tree[node*2],min_tree[node*2+1]); return; } int max_query(int node,int start,int end,int left,int right) { if(start>right || end<left) return -INF; if(left<=start && end<=right) return max_tree[node]; return max(max_query(node*2,start,(start+end)/2,left,right),max_query(node*2+1,(start+end)/2+1,end,left,right)); } int min_query(int node,int start,int end,int left,int right) { if(start>right || end<left) return INF; if(left<=start && end<=right) return min_tree[node]; return min(min_query(node*2,start,(start+end)/2,left,right),min_query(node*2+1,(start+end)/2+1,end,left,right)); } vector<int> check_validity(int N, vector<int> X, vector<int> Y,vector<int> S, vector<int> E,vector<int> L, vector<int> R) { vector<int> result; int n,m,Q; n=N; m=X.size(); Q=S.size(); edges.resize(n); for(int j=0;j<m;j++) { cnt[X[j]]++; cnt[Y[j]]++; edges[X[j]].push_back(Y[j]); edges[Y[j]].push_back(X[j]); } for(int j=0;j<m;j++) { if(cnt[j]==1) { linear.push_back(j); break; } } if(n<=3000 && m<=6000 && Q<=3000) { for(int i=0;i<Q;i++) { memset(visited1,false,sizeof(visited1)); memset(visited2,false,sizeof(visited2)); queue<int> q; q.push(S[i]); visited1[S[i]]=true; while(!q.empty()) { int cur=q.front(); q.pop(); for(int next: edges[cur]) { if(visited1[next]) continue; if(next<L[i]) continue; visited1[next]=true; q.push(next); } } q.push(E[i]); visited2[E[i]]=true; while(!q.empty()) { int cur=q.front(); q.pop(); for(int next: edges[cur]) { if(visited2[next]) continue; if(next>R[i]) continue; visited2[next]=true; q.push(next); } } int answer=0; for(int i=0;i<n;i++) if(visited1[i] && visited2[i]) answer=1; result.push_back(answer); } } else { queue<int> q; visited[linear[0]]=true; q.push(linear[0]); index[linear[0]]=0; while(!q.empty()) { int cur=q.front(); q.pop(); for(int next: edges[cur]) { if(visited[next]) continue; q.push(next); linear.push_back(next); index[next]=linear.size(); visited[next]=true; } } max_tree.resize(4*n); min_tree.resize(4*n); init(1,0,n-1); for(int i=0;i<Q;i++) { int s,e,l,r; s=index[S[i]]; e=index[E[i]]; l=L[i]; r=R[i]; int sl,sr,el,er; int high=s; int low=0; int mid; sl=s; sr=s; el=e; er=e; while(low<=high) { mid=(high+low)/2; if(min_query(1,0,n-1,mid,s)>=l) { sl=mid; high=mid-1; } else low=mid+1; } high=n-1; low=s; while(low<=high) { mid=(high+low)/2; if(min_query(1,0,n-1,s,mid)>=l) { sr=mid; low=mid+1; } else high=mid-1; } high=e; low=0; while(low<=high) { mid=(high+low)/2; if(max_query(1,0,n-1,mid,e)<=r) { el=mid; high=mid-1; } else low=mid+1; } high=n-1; low=e; while(low<=high) { mid=(high+low)/2; if(max_query(1,0,n-1,e,mid)<=r) { er=mid; low=mid+1; } else high=mid-1; } if(er<sl || el>sr) result.push_back(0); else result.push_back(1); } } return result; }

Compilation message (stderr)

werewolf.cpp:11:17: error: 'int index [222222]' redeclared as different kind of entity
   11 | int index[222222];
      |                 ^
In file included from /usr/include/string.h:432,
                 from /usr/include/c++/10/cstring:42,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:48,
                 from werewolf.cpp:1:
/usr/include/strings.h:61:1: note: previous declaration 'const char* index(const char*, int)'
   61 | index (const char *__s, int __c) __THROW
      | ^~~~~
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:126:14: error: invalid types '<unresolved overloaded function type>[__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type {aka int}]' for array subscript
  126 |         index[linear[0]]=0;
      |              ^
werewolf.cpp:137:22: error: invalid types '<unresolved overloaded function type>[int]' for array subscript
  137 |                 index[next]=linear.size();
      |                      ^
werewolf.cpp:147:20: error: invalid types '<unresolved overloaded function type>[__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type {aka int}]' for array subscript
  147 |             s=index[S[i]];
      |                    ^
werewolf.cpp:148:20: error: invalid types '<unresolved overloaded function type>[__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type {aka int}]' for array subscript
  148 |             e=index[E[i]];
      |                    ^