Submission #1038544

#TimeUsernameProblemLanguageResultExecution timeMemory
1038544vjudge1Werewolf (IOI18_werewolf)C++17
0 / 100
204 ms135996 KiB
#include "werewolf.h" #include<bits/stdc++.h> using namespace std; vector<int>adj[200100]; int stbmx[200100][20],stbmn[200100][20]; int CC; int pos[200100]; void dfs(int n,int p) { stbmn[pos[n]=++CC][0]=n; stbmx[CC][0]=n; for(auto i:adj[n]) if(i-p) dfs(i,n); } int qrymx(int l,int r){ int x=31-__builtin_clz(r-l+1); return max(stbmx[l][x],stbmx[r-(1<<x)+1][x]); } int qrymn(int l,int r){ int x=31-__builtin_clz(r-l+1); return min(stbmn[l][x],stbmn[r-(1<<x)+1][x]); } std::vector<int> check_validity(int N, std::vector<int> X, std::vector<int> Y, std::vector<int> S, std::vector<int> E,std::vector<int> L, std::vector<int> R) { for(int i=0;i<X.size();i++) adj[X[i]].push_back(Y[i]), adj[Y[i]].push_back(X[i]); int lef=0; for(int i=0;i<N;i++) if(adj[i].size()==1) lef=i; memset(stbmx,1,sizeof stbmx); memset(stbmn,-1,sizeof stbmn); dfs(lef,-1); for(int j=1;j<20;j++) for(int i=1;i<N-(1<<j)+2;i++) stbmx[i][j]=max(stbmx[i][j-1],stbmx[i+(1<<j-1)][j-1]), stbmn[i][j]=min(stbmn[i][j-1],stbmn[i+(1<<j-1)][j-1]); int Q=S.size(); vector<int>A(Q); for(int i=0;i<Q;i++){ int s=S[i],e=E[i]; s=pos[s]; e=pos[e]; if(s<e) { int l=s,r=e,res=0; while(l<=r){ int mid=l+r>>1; if(qrymn(s,mid)>=L[i]) l=mid+1,res=mid; else r=mid-1; } A[i]=qrymx(res,e)<=R[i]; } else { int l=e,r=s,res=0; while(l<=r){ int mid=l+r>>1; if(qrymx(e,mid)<=R[i]) l=mid+1,res=mid; else r=mid-1; } A[i]=qrymn(res,e)>=L[i]; } } return A; }

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:24:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |   for(int i=0;i<X.size();i++)
      |               ~^~~~~~~~~
werewolf.cpp:35:48: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   35 |     stbmx[i][j]=max(stbmx[i][j-1],stbmx[i+(1<<j-1)][j-1]),
      |                                               ~^~
werewolf.cpp:36:48: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   36 |     stbmn[i][j]=min(stbmn[i][j-1],stbmn[i+(1<<j-1)][j-1]);
      |                                               ~^~
werewolf.cpp:46:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   46 |         int mid=l+r>>1;
      |                 ~^~
werewolf.cpp:55:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   55 |         int mid=l+r>>1;
      |                 ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...