Submission #132777

#TimeUsernameProblemLanguageResultExecution timeMemory
132777TadijaSebezMechanical Doll (IOI18_doll)C++11
100 / 100
197 ms15516 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int N=200050;
const int M=2*N;
int ls[M],rs[M],root,tsz;
vector<int> Build(vector<int> v)
{
	if(v.size()==1) return v;
	vector<int> u[2];
	for(int i=0;i<v.size();i++) u[i&1].pb(v[i]);
	u[0]=Build(u[0]);
	u[1]=Build(u[1]);
	v.clear();
	for(int i:u[0]) v.pb(i);
	for(int i:u[1]) v.pb(i);
	return v;
}
int n,m,k;
int a[M],pos[M];
bool use[M];
void Build(int &c, int ss, int se)
{
	if(se<=k){ c=root;return;}
	if(ss==se){ c=-a[ss];return;}
	c=++tsz;
	int mid=ss+se>>1;
	Build(ls[c],ss,mid);
	Build(rs[c],mid+1,se);
}
void create_circuit(int M, vector<int> A)
{
	A.pb(0);
	m=M;n=A.size();
	int sz=1;
	while(sz<A.size()) sz<<=1;
	vector<int> v;
	for(int i=1;i<=sz;i++) v.pb(i);
	v=Build(v);
	k=sz-n;
	for(int i=k;i<sz;i++)
	{
		use[v[i]]=1;
		pos[v[i]]=i+1;
	}
	for(int i=1,j=0;i<=sz;i++)
	{
		if(use[i])
		{
			a[pos[i]]=A[j];
			j++;
		}
	}
	Build(root,1,sz);
	vector<int> C,X,Y;
	C.assign(m+1,-1);
	for(int i=1;i<=tsz;i++) X.pb(-ls[i]),Y.pb(-rs[i]);
	answer(C,X,Y);
}

Compilation message (stderr)

doll.cpp: In function 'std::vector<int> Build(std::vector<int>)':
doll.cpp:12:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |  for(int i=0;i<v.size();i++) u[i&1].pb(v[i]);
      |              ~^~~~~~~~~
doll.cpp: In function 'void Build(int&, int, int)':
doll.cpp:28:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   28 |  int mid=ss+se>>1;
      |          ~~^~~
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:37:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |  while(sz<A.size()) sz<<=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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...