Pagini recente » Cod sursa (job #2495502) | Cod sursa (job #819966) | Cod sursa (job #2159864) | Cod sursa (job #2730968) | Cod sursa (job #1710047)
#include <stdio.h>
#include <stdlib.h>
int megold(int * A,int n){
int **B=(int**)calloc(n,sizeof(int*));
int i,j,k;
for ( i=0; i<n; ++i ){
B[i]=(int*)calloc(n,sizeof(int));
}
if (!B[n-1]){
return -2;
}
for (j=1;j<n;++j){
for (i=j-1;i>=0;--i){
if (A[i]==A[j]){
if ((i!=0 && B[i-1][j]==-1) || B[i][j-1]==-1){
;
}else{
B[i][j]=1;
B[n-1][0]=(B[n-1][0]<(j-i))?(j-i):B[n-1][0];
for (k=i;k>=0;--k){
B[k][j]=-1;
}
for (k=j;k<n;++k){
B[i][k]=-1;
}
}
}
}
}
//MatOut(B,n);
return (B[n-1][0]==0)?-1:B[n-1][0];
}
void MatOut(int **A,int n){
int i,j;
for (i=0;i<n;++i){
for (j=0;j<n;++j){
printf("%3i ",A[i][j]);
}
printf("\n");
}
printf("\n");
}
int main()
{
FILE * f=fopen("pq.in","r");
FILE * g=fopen("pq.out","w");
if (!f)
{
return -1;
}
int n,q,i;
fscanf(f,"%i %i",&n,&q);
int *A = (int*)malloc(n*sizeof(int));
for ( i=0; i<n; ++i )
{
fscanf(f, "%i", A+i);
}
int u,v;
while (fscanf(f,"%i",&u)!=EOF && fscanf(f,"%i",&v)!=EOF){
u--;
v--;
fprintf(g,"%i\n",megold(A+u,v-u+1));
}
fclose(f);
fclose(g);
return 0;
}