Obrni opseg!

Implementirati funkciju koja obrće opseg, koji je dat pocetnim i krajnjim pokazivačem, nekog niza.

Ulaz

Sa standardnog ulaza se unosi broj elemenata niza $n$ ($1 \leq n \leq 10^9$) i broj upita $q$ ($1 \leq q \leq 10$). Zatim se unosi $n$ elemenata niza iz opsega od $-10^9$ do $10^9$, i na kraju $q$ upita oblika:

<l> <r> - obrni elemente u ospegu od [<l>,<r>) (<l> je uvek menje od <r>).

Izlaz

Na standardni izlaz, za svaki od $q$ upita, ispisati trenutno stanje niza.

Primer

Ulaz

10 3
0 1 2 3 4 5 6 7 8 9
2 6
0 3
0 10

Izlaz

0 1 5 4 3 2 6 7 8 9
5 1 0 4 3 2 6 7 8 9
9 8 7 6 2 3 4 0 1 5

Rešenje

main.c

#include <stdio.h>
#include <stdlib.h>

void reverse_range(int *l, int *r)
{
	r--;
	while (l < r) {
		int temp = *l;
		*l = *r;
		*r = temp;
		l++; r--;
	}
}

int main(void)
{
	size_t n, q;

	scanf("%d %d", &n, &q);

	// int arr[n]; variable length arrays (stack allocation limitations)
	int *arr = malloc(n * sizeof (int));
	if (arr == NULL) {
		exit(EXIT_FAILURE);
	}

	for (size_t i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}

	while (q--) {
		int l, r;
		scanf("%d %d", &l, &r);

		reverse_range(arr + l, arr + r);

		for (size_t i = 0; i < n; i++) {
			printf("%d ", arr[i]);
		}
		printf("\n");
	}

	free(arr);

	exit(EXIT_SUCCESS);
}