Pagini recente » Rating Coconcea Mihai-Alexandru (kokoboy) | Cod sursa (job #1916537) | Cod sursa (job #1342791) | Cod sursa (job #937250) | Cod sursa (job #2758253)
#include <fstream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int n;
int AI[200005];
//https://www.geeksforgeeks.org/interval-tree/
void Updatare(int node, int l, int r, int pos)
{
if (l == r) { AI[node] = 0; return;}
int m = (l + r) / 2;
if (pos <= m) Updatare(node * 2, l, m, pos);
else Updatare(node * 2 + 1, m + 1, r, pos);
AI[node] = A[node * 2] + A[node * 2 + 1];
}
int Query(int node, int l, int r, int k)
{
if (l == r) return st;
int m = (l + r) / 2;
if (AI[2 * node] >= k) return Query(2 * node, st, mij, k);
else return Query(2 * node + 1, m + 1, r, k - AI[2 * node]);
}
void Constructie(int node, int l, int r)
{
if (l == r) {AI[node] = 1; return; }
int m = (l + r) / 2;
Constructie(2 * node, l, m);
Constructie(2 * node + 1, m + 1, r);
AI[node] = AI[2 * node] + AI[2 * node + 1];
}
int main()
{
fin >> n;
Constructie(1, 1, n);
int pos = 2;
for (int i = 1; i <= n; i++)
{
pos += (i - 1);
while (pos > AI[1])
pos -= AI[1];
int q = Query(1, 1, n, pos);
fout << q << " ";
Updatare(1, 1, n, q);
}
return 0;
}