Submission #864433

#TimeUsernameProblemLanguageResultExecution timeMemory
864433Ahmed57ICC (CEOI16_icc)C++17
61 / 100
127 ms3156 KiB
#include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> #include "icc.h" int p[100001]; vector<int> v[100001]; int find(int x){ if(x==p[x])return x; return p[x] = find(p[x]); } void merge(int a,int b){ a = find(a) , b = find(b); if(a==b)return ; if(v[a].size()<v[b].size())swap(a,b); p[b] = a; while(v[b].size()){ v[a].push_back(v[b].back());v[b].pop_back(); } } int quer(int a,int b,vector<int>A , vector<int> B){ int AA[a]; for(int i = 0;i<A.size();i++)AA[i] = A[i]; int BB[b]; for(int i = 0;i<B.size();i++)BB[i] = B[i]; return query(a,b,AA,BB); } mt19937 rng; void run(int n){ rng.seed(72); for(int i = 1;i<=n;i++){ p[i] = i; v[i].push_back(i); } for(int it = 0;it<n-1;it++){ vector<int> a , b; for(int xd = 0;;xd++){ ordered_set lol; vector<int> fi , se; for(int i = 1;i<=n;i++){ if(i==find(i))lol.insert(i); } for(int i = 0;i<(n-it)/2;i++){ int x = rng()%lol.size(); auto it = lol.find_by_order(x); for(auto a3:v[(*it)])fi.push_back(a3); lol.erase(it); } for(auto i:lol){ for(auto a3:v[i])se.push_back(a3); } if(quer(fi.size(),se.size(),fi,se)){ a = fi , b = se; break; } } while(a.size()>1||b.size()>1){ if(a.size()<b.size())swap(a,b); vector<int> A,B; for(int i = 0;i<a.size();i++){ A.push_back(a[i]); }for(int i = 0;i<max(int(b.size()/2),1);i++){ B.push_back(b[i]); } if(quer(A.size(),B.size(),A,B)){ A.clear(); for(int i = 0;i<max(int(a.size()/2),1);i++){ A.push_back(a[i]); } if(quer(A.size(),B.size(),A,B)){ a = A , b = B; continue; }else{ A.clear(); for(int i = a.size()/2;i<a.size();i++){ A.push_back(a[i]); } a = A;b = B; continue; } continue; }else{ B.clear(); for(int i = b.size()/2;i<b.size();i++){ B.push_back(b[i]); } A.clear(); for(int i = 0;i<max(int(a.size()/2),1);i++){ A.push_back(a[i]); } if(quer(A.size(),B.size(),A,B)){ a = A , b = B; continue; }else{ A.clear(); for(int i = a.size()/2;i<a.size();i++){ A.push_back(a[i]); } a = A;b = B; continue; } continue; } } setRoad(a[0],b[0]); merge(a[0],b[0]); } } /*int main(){ }*/

Compilation message (stderr)

icc.cpp: In function 'int quer(int, int, std::vector<int>, std::vector<int>)':
icc.cpp:27:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for(int i = 0;i<A.size();i++)AA[i] = A[i];
      |                   ~^~~~~~~~~
icc.cpp:29:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     for(int i = 0;i<B.size();i++)BB[i] = B[i];
      |                   ~^~~~~~~~~
icc.cpp: In function 'void run(int)':
icc.cpp:64:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |             for(int i = 0;i<a.size();i++){
      |                           ~^~~~~~~~~
icc.cpp:79:45: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |                     for(int i = a.size()/2;i<a.size();i++){
      |                                            ~^~~~~~~~~
icc.cpp:88:41: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |                 for(int i = b.size()/2;i<b.size();i++){
      |                                        ~^~~~~~~~~
icc.cpp:100:45: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  100 |                     for(int i = a.size()/2;i<a.size();i++){
      |                                            ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...