Barricadenick's blog

By Barricadenick, history, 7 years ago, In Russian

Сегодня отправил решение по одной задаче на языке C. Выбрал компилятор GNU C11, но получил TL (1 сек) на 11 тесте. Потом отправил тот же код с компилятором GNU C и получил OK (124 мс). Решение так же заходит на GNU C++ и GNU C++11. В коде не вижу UB. В задаче особо негде TL-иться. Решение O(n), n = 300000. Единственная возможная проблема: 300000 чисел на ввод и вывод. Почему в GNU C11 ввод и вывод работают в 10 раз медленнее? Или есть другая причина?

Посылки: GNU C11, GNU C.

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

#define MAX_N 300000
int arr[MAX_N];

int main(int pArgc, char **pArgs) {
#ifdef LOCAL
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif

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

	int k = n;
	
	printf("1 ");
	for (int i = 0; i < n; ++i) {
		int x;
		scanf("%d", &x);
		--x;
		arr[x] = 1;
		while (k > 0 && arr[k - 1])
			--k;
		printf("%d ", i + 2 - n + k);
	}

	return 0;
}
  • Vote: I like it
  • +13
  • Vote: I do not like it