Cod sursa(job #2427640)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 1 iunie 2019 13:11:01
Problema Order Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.5 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("order.in");
ofstream out("order.out");

const int DIM = 3e4 + 7;

int aint[6 * DIM];

void build_tree(int pos, int l, int r)
{
	if(l == r)
	{
		aint[pos] = 1;
		return ;
	}
	
	int mid = (l + r) / 2;
	
	build_tree(pos * 2, l, mid);
	build_tree(pos * 2 + 1, mid + 1, r);
	
	aint[pos] = r - l + 1;
}

void query(int pos, int l, int r, int cnt)
{
	if(l == r)
	{
		out << l << ' ';
		aint[pos] = 0;
		
		return ;
	}
	
	int mid = (l + r) / 2;
	
	if(aint[pos * 2] >= cnt)
		query(pos * 2, l, mid, cnt);
	else
		query(pos * 2 + 1, mid + 1, r, cnt - aint[pos * 2]);
	
	aint[pos] = aint[pos * 2] + aint[pos * 2 + 1];
}

int main()
{
	int n;
	in >> n;
	
	build_tree(1, 1, n);
	
	int pos = 2;
	
	for(int i = 1; i <= n; i++)
	{
		query(1, 1, n, pos);
		
		if(i != n)
		{
			pos = (pos + i) % aint[1];
			
			if(pos == 0)
				pos = aint[1];
		}
	}
}#include <bits/stdc++.h>

using namespace std;

ifstream in("order.in");
ofstream out("order.out");

const int DIM = 3e4 + 7;

int aint[6 * DIM];

void build_tree(int pos, int l, int r)
{
	if(l == r)
	{
		aint[pos] = 1;
		return ;
	}
	
	int mid = (l + r) / 2;
	
	build_tree(pos * 2, l, mid);
	build_tree(pos * 2 + 1, mid + 1, r);
	
	aint[pos] = r - l + 1;
}

void query(int pos, int l, int r, int cnt)
{
	if(l == r)
	{
		out << l << ' ';
		aint[pos] = 0;
		
		return ;
	}
	
	int mid = (l + r) / 2;
	
	if(aint[pos * 2] >= cnt)
		query(pos * 2, l, mid, cnt);
	else
		query(pos * 2 + 1, mid + 1, r, cnt - aint[pos * 2]);
	
	aint[pos] = aint[pos * 2] + aint[pos * 2 + 1];
}

int main()
{
	int n;
	in >> n;
	
	build_tree(1, 1, n);
	
	int pos = 2;
	
	for(int i = 1; i <= n; i++)
	{
		query(1, 1, n, pos);
		
		if(i != n)
		{
			pos = (pos + i) % aint[1];
			
			if(pos == 0)
				pos = aint[1];
		}
	}
}#include <bits/stdc++.h>

using namespace std;

ifstream in("order.in");
ofstream out("order.out");

const int DIM = 3e4 + 7;

int aint[6 * DIM];

void build_tree(int pos, int l, int r)
{
	if(l == r)
	{
		aint[pos] = 1;
		return ;
	}
	
	int mid = (l + r) / 2;
	
	build_tree(pos * 2, l, mid);
	build_tree(pos * 2 + 1, mid + 1, r);
	
	aint[pos] = r - l + 1;
}

void query(int pos, int l, int r, int cnt)
{
	if(l == r)
	{
		out << l << ' ';
		aint[pos] = 0;
		
		return ;
	}
	
	int mid = (l + r) / 2;
	
	if(aint[pos * 2] >= cnt)
		query(pos * 2, l, mid, cnt);
	else
		query(pos * 2 + 1, mid + 1, r, cnt - aint[pos * 2]);
	
	aint[pos] = aint[pos * 2] + aint[pos * 2 + 1];
}

int main()
{
	int n;
	in >> n;
	
	build_tree(1, 1, n);
	
	int pos = 2;
	
	for(int i = 1; i <= n; i++)
	{
		query(1, 1, n, pos);
		
		if(i != n)
		{
			pos = (pos + i) % aint[1];
			
			if(pos == 0)
				pos = aint[1];
		}
	}
}#include <bits/stdc++.h>

using namespace std;

ifstream in("order.in");
ofstream out("order.out");

const int DIM = 3e4 + 7;

int aint[6 * DIM];

void build_tree(int pos, int l, int r)
{
	if(l == r)
	{
		aint[pos] = 1;
		return ;
	}
	
	int mid = (l + r) / 2;
	
	build_tree(pos * 2, l, mid);
	build_tree(pos * 2 + 1, mid + 1, r);
	
	aint[pos] = r - l + 1;
}

void query(int pos, int l, int r, int cnt)
{
	if(l == r)
	{
		out << l << ' ';
		aint[pos] = 0;
		
		return ;
	}
	
	int mid = (l + r) / 2;
	
	if(aint[pos * 2] >= cnt)
		query(pos * 2, l, mid, cnt);
	else
		query(pos * 2 + 1, mid + 1, r, cnt - aint[pos * 2]);
	
	aint[pos] = aint[pos * 2] + aint[pos * 2 + 1];
}

int main()
{
	int n;
	in >> n;
	
	build_tree(1, 1, n);
	
	int pos = 2;
	
	for(int i = 1; i <= n; i++)
	{
		query(1, 1, n, pos);
		
		if(i != n)
		{
			pos = (pos + i) % aint[1];
			
			if(pos == 0)
				pos = aint[1];
		}
	}
}