Heidi and Library (easy)

Your search for Heidi is over – you finally found her at a library, dressed up as a human. In fact, she has spent so much time there that she now runs the place! Her job is to buy books and keep them at the library so that people can borrow and read them. There are n different books, numbered 1 through n.

We will look at the library's operation during n consecutive days. Heidi knows in advance that on the i-th day (1 ≤ i ≤ n) precisely one person will come to the library, request to borrow the book ai, read it in a few hours, and return the book later on the same day.

Heidi desperately wants to please all her guests, so she will make sure to always have the book ai available in the library on the i-th day. During the night before the i-th day, she has the option of going to the bookstore (which operates at nights to avoid competition with the library) and buying any book for the price of 1 CHF. Of course, if she already has a book at the library, she does not need to buy it again. Initially, the library contains no books.

There is a problem, though. The capacity of the library is k – this means that at any time, there can be at most k books at the library. If buying a new book would cause Heidi to have more than k books, she must first get rid of some book that she already has, in order to make room for the new book. If she later needs a book that she got rid of, she will need to buy that book again.

You are given k and the sequence of requests for books a1, a2, ..., an. What is the minimum cost (in CHF) of buying new books to satisfy all the requests?

Input

The first line of input will contain two integers n and k (1 ≤ n, k ≤ 80). The second line will contain n integers a1, a2, ..., an (1 ≤ ai ≤ n) – the sequence of book requests.

Output

On a single line print the minimum cost of buying books at the store so as to satisfy all requests.

Examples

Input

4 80
1 2 2 1

Output

2

Input

4 1
1 2 2 1

Output

3

Input

4 2
1 2 3 1

Output

3

Note

In the first test case, Heidi is able to keep all books forever. Therefore, she only needs to buy the book 1 before the first day and the book 2 before the second day.

In the second test case, she can only keep one book at a time. Therefore she will need to buy new books on the first, second and fourth day.

In the third test case, before buying book 3 on the third day, she must decide which of the books 1 and 2 she should get rid of. Of course, she should keep the book 1, which will be requested on the fourth day.

题意:

   天数为n,图书馆容量为k,第i天某人需要借阅的书ai并于当天归还,一开始图书馆没有藏书,需要的书在前一天晚上购买,买一本书需要1元

思路:
     先判断图书馆中有没有这本书,有的话不需要买,没有的话再判断容量是否已满,不满的话直接买吧,满的话再判断吧

     这里的贪心策略是 在容量已经满的情况下,我需要扔掉的是下一次出现最晚的书,因为这本书占用图书馆空间的时间最长

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<set>
#include<vector>
#include<map>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
int main(){
	int n,k;
	int a[85];
	cin>>n>>k;
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	set<int> s;
	set<int>::iterator it;
	int cnt=0;
	for(int i=0;i<n;i++)
	{
		if(!s.count(a[i]))
		{
			if(s.size()==k)
			{
				int Max=-1,p=-1;
				for(it=s.begin();it!=s.end();it++)
				{
					int j;
					for(j=i;j<n;j++)
					{
						if(a[j]==*it)
						{
							break;
						}
					}
				    if(j>Max)
					{
				    	Max=j;
				    	p=*it;
					}	
			    }
			    s.erase(p);
			}
				s.insert(a[i]);
				cnt++;
		}
	}
	cout<<cnt<<endl;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼爱吃火锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值