codeforcs 351 C. Bear and Color

C. Bear and Colors
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Bear Limak has n colored balls, arranged in one long row. Balls are numbered 1 through n, from left to right. There are n possible colors, also numbered 1 through n. The i-th ball has color ti.

For a fixed interval (set of consecutive elements) of balls we can define a dominant color. It's a color occurring the biggest number of times in the interval. In case of a tie between some colors, the one with the smallest number (index) is chosen as dominant.

There are  non-empty intervals in total. For each color, your task is to count the number of intervals in which this color is dominant.

Input

The first line of the input contains a single integer n (1 ≤ n ≤ 5000) — the number of balls.

The second line contains n integers t1, t2, ..., tn (1 ≤ ti ≤ n) where ti is the color of the i-th ball.

Output

Print n integers. The i-th of them should be equal to the number of intervals where i is a dominant color.

Examples
input
4
1 2 1 2
output
7 3 0 0 
input
3
1 1 1
output
6 0 0 
Note

In the first sample, color 2 is dominant in three intervals:

  • An interval [2, 2] contains one ball. This ball's color is 2 so it's clearly a dominant color.
  • An interval [4, 4] contains one ball, with color 2 again.
  • An interval [2, 4] contains two balls of color 2 and one ball of color 1.

There are 7 more intervals and color 1 is dominant in all of them.

題意: 有n個數,要你求在每個區間那個數佔主導,如果一個區間有兩個數的個數相同,則數字小的是主導;

思路:由於數據不大可以直接暴力查找每個區間

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[5005],b[5005],num[5005];
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)
	{
		memset(num,0,sizeof num);
		int ma=0,maxx=0;
		
		for(int j=i;j<=n;j++)
		{
			num[a[j]]++;
			if(ma<num[a[j]])
			{
				ma=num[a[j]];
				maxx=a[j];
			}
			else if(ma==num[a[j]])
			{
				if(maxx>a[j])
				maxx=a[j]; 
			}
			b[maxx]++;
			
		}
	}
		for(int i=1;i<=n;i++)
		{
			printf("%d ",b[i]);
		}
		puts("");
		
	
	
	
}

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