Submission #152910

#TimeUsernameProblemLanguageResultExecution timeMemory
152910SegtreeMechanical Doll (IOI18_doll)C++14
2 / 100
50 ms11388 KiB
#include "doll.h"
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
#define mod 1000000007
ll tap(ll x){
    ll t=2;
    while(t<x)t*=2;
    return t;
}
vector<int> c,x,y;
void func(ll cur,vector<int> to){
    if(to.size()==1){
	c[cur]=to[0];
	return;
    }
    ll n=tap(to.size()); //cout<<"---"<<n<<endl;
    //n=4;
    int base=x.size();
    c[cur]=-base-1;
    for(int i=0;i<n-1;i++){
	x.push_back(-base-1);
	y.push_back(-base-1);
    }
    for(int i=1;i<n/2;i++){
	x[base+i-1]=-base-(i*2);
	y[base+i-1]=-base-(i*2+1);
    }
    ll p=0,tt=n/2;
    for(int i=0;i<to.size()-1;i++){
	vector<bool> v;
	ll cop=tt;
	while(cop){
	    v.push_back(cop&1);
	    cop>>=1;
	}
	reverse(v.begin(),v.end());
	ll ra=1,res=0;
	for(int j=0;j<v.size();j++){
	    res+=v[j]*ra;
	    ra*=2;
	}
	if(res%2==0)x[base+res/2-1]=to[p];
	if(res%2==1)y[base+res/2-1]=to[p];
    }
    y[base+n-2]=to[p];
}

vector<int> too[100010];
void create_circuit(int M,vector<int> A){
    ll bef=0;
    for(int i=0;i<A.size();i++){
	too[bef].push_back(A[i]);
	bef=A[i];
    }
    too[bef].push_back(0);
    for(int i=0;i<=M;i++){
	c.push_back(0);
	if(too[i].size()>0){
	    func(i,too[i]);
	}
    }
    /*
    cout<<"C:";
    for(int i=0;i<c.size();i++)cout<<c[i]<<" "; cout<<endl;
    cout<<"X:"<<endl;
    for(int i=0;i<x.size();i++)cout<<x[i]<<" "<<y[i]<<endl;*/
    answer(c,x,y);
}
/*
int main(){
  vector<int> A(4);
  for(int i=0;i<4;i++)cin>>A[i];
  
  create_circuit(4,A);
  return 0;
}*/

Compilation message (stderr)

doll.cpp: In function 'void func(ll, std::vector<int>)':
doll.cpp:32:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |     for(int i=0;i<to.size()-1;i++){
      |                 ~^~~~~~~~~~~~
doll.cpp:41:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<bool>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |  for(int j=0;j<v.size();j++){
      |              ~^~~~~~~~~
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:54:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     for(int i=0;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...