Pagini recente » Cod sursa (job #1313104) | Cod sursa (job #807190) | Cod sursa (job #2906905) | Cod sursa (job #650464) | Cod sursa (job #3134817)
#include <math.h>
#include <stdio.h>
#include <vector>
int pos[100005];
int main() {
freopen("farfurii.in", "r", stdin);
freopen("farfurii.out", "w", stdout);
int N, K;
scanf("%d %d", &N, &K);
int param = 8 * K + 1, nums = sqrt(param);
if (nums * nums != param) {
nums = nums + 1;
}
nums = (nums + 2) >> 1;
int32_t dif = N - nums;
int pos_s = 0;
for (int n = nums, k = K; k > 0; n--, pos_s++) {
pos[pos_s] = k;
int pred = ((n - 1) * (n - 2)) / 2;
if (k - pred == n - 1) {
k = pred;
} else {
k = pred - (n - 2) + (k - pred);
}
}
std::vector<int32_t> res;
res.push_back(1 + dif);
for (int i = pos_s - 1, n = 1; i >= 0; i--, n++) {
if (pos[i] == ((n * (n + 1)) / 2)) {
res.push_back(n + 1 + dif);
} else {
int last = res.back();
res.pop_back();
res.push_back(n + 1 + dif);
res.push_back(last);
}
}
for (int i = N - nums; i >= 1; i--) {
res.push_back(i);
}
for (int i = res.size() - 1; i >= 0; i--) {
printf("%d ", res[i]);
}
printf("\n");
return 0;
}