fjnu最大區間問題

最大區間問題

Time Limit: 1 Seconds     Memory Limit: 32768 K

Total Submit:70     Accepted:12


Description

給你兩個數N,M。(1 ≤ N,M ≤ 5000).
N表示有N個非負數,每個數都小於1000000。M表示M次詢問。
然後給你一個含N個數的數列。
接下來的M行,每行兩個數L, R (0 ≤ L ≤ R ≤ N -1)。
對於每一次詢問,你的任務是求出L,R中的一個最大子區間, 要求該區間所有的數都不相同,只要求得這個最大子區間的長度即可。

Input

第一行N,M
第二行N個數,注意數的位置從0開始算。
以下M行.每行包含兩個數L,R.

Output

只有一行,對於每一次詢問,輸出最長的滿足要求的區間長度。

Sample Input

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

 

Sample Output

6
5

 

Hint

0到8 這9個數滿足要的的區間是'5 4 1 2 3 6',該區間長度最大,而且沒有兩個的數是相同的。
2到6這5個數爲4 1 2 3 6,因爲沒有任何兩個數是相同的,所以其本身就滿足要求,長度爲5。

 

此題不能說難,但也要一定的思維哦~~

Source:

#include<stdio.h>
int main()
{
	int i,j,n,m,x,y,sum,max,b[5001]={0};
	long a[5001];
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
		scanf("%ld",&a[i]);
	for(i=0;i<n;i++)
		for(j=i-1;j>=0;j--)
			if(a[i]==a[j])
			{
				b[i]=j+1;
				break;
			}
	while(m--)
	{
		scanf("%d%d",&x,&y);
		sum=0;max=0;
		for(i=x;i<=y;i++)
		{
				if(b[i]!=0&&b[i]>x)
				{
					if(sum>max)
						max=sum;
					else
					{
						sum=i-b[i];
						x=b[i];
					}
				}
			sum++;
			if(sum>max)
				max=sum;
		}
		printf("%d/n",max);
	}
	return 0;
} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章