summaryrefslogtreecommitdiffstats
path: root/šola/aps1/dn/zlivanje/resitev.cpp
blob: 892601999a07b18f455742a2c0d5e7fe35db2a97 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int compar_long (const void * a, const void * b) {
	if (*(long *)a < *(long *)b)
		return -1;
	return *(long *)a > *(long *) b;
}
int main (void) {
	long N, K, A;
	scanf("%ld %ld %ld", &N, &K, &A);
	long * d = (long *) malloc(N*sizeof *d);
	long čet = 0;
	long lastidx = 0;
	long long četkončno = 1;
	for (long i = 0; i < A && četkončno <= 2000000; i++)	// pravzaprav četkončno := K**A,
		četkončno *= K;		// toda C nima int potence
	// fprintf(stderr, "aaaaaaaa %ld\n", četkončno);
	for (long i = 0; i < N; i++) {
		scanf("%ld", d+i);
		if (i && d[i-1] > d[i])
			if (++čet >= četkončno) {
				qsort(d+lastidx, i-lastidx, sizeof d[0], compar_long);
				čet = 0;
				lastidx = i;
			}
	}
	qsort(d+lastidx, N-lastidx, sizeof d[0], compar_long);
	bool devica = true;
	for (long i = 0; i < N; i++) {
		if (devica)
			devica = false;
		else
			printf(" ");
		printf("%ld", d[i]);
	}
	printf("\n");
}