Cod sursa(job #1709941)

Utilizator CodeFxSAPIENTIA CodeFx CodeFx Data 28 mai 2016 14:32:15
Problema Pq Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.63 kb
#include <stdio.h>
#include <stdlib.h>
/*
typedef struct pont {
	int ertek;
	struct pont *kov;
}PONT;

PONT *tomb[100001];


void beszur(int n, PONT **point) {
	if (!(*point)) {
		*point = (PONT *)malloc(sizeof(PONT));
		(*point)->ertek = n;
		(*point)->kov = NULL;
	}
	else {
		PONT *it = *point;
		while (it->kov != NULL) {
			it = it->kov;
		}
		it->kov = (PONT *)malloc(sizeof(PONT));
		it->kov->ertek = n;
		it->kov->kov = NULL;
	}
	return;
}
*/

int sor1[100001], sor2[100001];

int main() {
	int N, Q, i, j, a, b, maxi, maxi1, k;
	//PONT *it;
	freopen("pq.in", "r", stdin);
	freopen("pq.out", "w", stdout);
	scanf("%d%d", &N, &Q);
	for (i = 1; i <= N; ++i) {
		scanf("%d", &sor1[i]);
		//beszur(i, &tomb[sor[i]]);
	}
	for (i = 1; i <= N; ++i) {
		k = 1;
		for (j = i + 1; j <= N && k; ++j) {
			if (sor1[i] == sor1[j]) {
				k = 0;
				sor2[i] = j;
			}
		}
	}
	/*for (i = 1; i <= N; ++i) {
		printf("%d ", sor2[i]);
	}
	printf("\n");*/
	for (i = 0; i < Q; ++i) {
		scanf("%d%d", &a, &b);
		maxi = -1;
		/*
		for (j = a; j <= b; ++j) {
			maxi1 = -1;
			for (it = tomb[sor[j - 1]], k = tomb[sor[j-1]]->ertek; it != NULL && it->ertek <= b - 1; it = it->kov) {
				if (it != NULL && it != tomb[sor[j-1]] && k >= a-1 && it->ertek >= a - 1 && maxi1 < it->ertek - k) {
					maxi1 = (it->ertek) - k;
				}
				if (it->ertek >= a-1 && it->ertek <= b-1)
					k = it->ertek;
			}
			if (maxi < maxi1) {
				maxi = maxi1;
			}
		}*/
		for (j = a; j < b; ++j) {
			if (sor2[j] != 0 && sor2[j] <= b && maxi < sor2[j] - j) {
				maxi = sor2[j] - j;
			}
		}
		printf("%d\n", maxi);
	}
	return 0;
}