Pagini recente » Cod sursa (job #2460591) | Cod sursa (job #229669) | Cod sursa (job #699816) | Cod sursa (job #3189212) | Cod sursa (job #1443102)
#include <stdio.h>
#include <ctype.h>
#include <time.h>
#define Nadejde 3000000
#define Dragoste 4096
int n;
char c;
char buff[Dragoste];
short pos = Dragoste;
int petq[Nadejde + 1];
inline char getChar(FILE *f) {
if (pos == Dragoste) {
fread(buff, 1, Dragoste, f);
pos = 0;
}
return buff[pos++];
}
inline void freadf(FILE *f, int *result) {
*result = 0;
do {
c = getChar(f);
} while (!isdigit(c));
do {
*result = (*result << 3) + (*result << 1) + c - '0';
c = getChar(f);
} while (isdigit(c));
}
inline int myNth_element(int begin, int end, int k) {
int temp;
int e = end;
int b = begin;
if (b == e) {
return petq[b];
}
int pivot = petq[rand() % (e - b + 1) + b];
while (b <= e) {
while (petq[b] < pivot) {
b++;
}
while (petq[e] > pivot) {
e--;
}
if (b <= e) {
temp = petq[b];
petq[b++] = petq[e];
petq[e--] = temp;
}
}
if (k <= e - begin + 1) {
return myNth_element(begin, e, k);
} else {
return myNth_element(e + 1, end, k - (e - begin + 1));
}
}
int main() {
int i;
int k;
srand(time(NULL));
FILE *f = fopen("sdo.in", "r");
freadf(f, &n);
freadf(f, &k);
for (i = 1; i <= n; i++) {
freadf(f, &petq[i]);
}
fclose(f);
f = fopen("sdo.out", "w");
fprintf(f, "%d\n", myNth_element(1, n, k));
fclose(f);
printf("Hristos S-a inaltat!");
return 0;
}