当前位置:网站首页>[exercise -10] unread messages

[exercise -10] unread messages

2022-07-06 15:57:00 Flame car

Title Description

There is a group of people in an internet email message group. Messages are sent to all members of the group, and no two messages are sent at the same time.
Immediately before a person sends a message, they read all their unread messages up to that point.
Each sender also reads their own message the moment it is sent. Therefore, a person’s unread messages are exactly the set of messages sent after that person’s last message.
Each time a message is sent, compute the total number of unread messages over all group members.

Input

The first line of input contains two integers n (1 ≤ n ≤ 109 ) and m (1 ≤ m ≤ 1,000), where n is the number of people in the group, and m is the number of messages sent. The group members are
identified by number, 1 through n.
Each of the next m lines contains a single integer s (1 ≤ s ≤ n), which is the sender of that message. These lines are in chronological order.

Output

Output m lines, each with a single integer, indicating the total number of unread messages over all group members, immediately after each message is sent.

The sample input

【 Examples 1】
2 4
1
2
1
2
【 Examples 2】
3 9
1
2
3
2
1
3
3
2
1

Sample output

【 Examples 1】
1
1
1
1
【 Examples 2】
2
3
3
4
3
3
5
4
3

The main idea of the topic :

Yes n Personal hair m The second news ( Only one person at a time ), Next m Line no line input is sent by the first person .
When a person sends a message , Everyone else will have an unread message , When a person sends a message , His unread news will be cleared 0.

AC Code :

#include<bits/stdc++.h>
using namespace std;
#define CLEAR(a) memset(a,0,sizeof a);
typedef long long ll;
const int N = 1e5+5;
const ll mod = 1e9+7;
map<ll,ll> mp;
int main()
{
    
	ll n,m,x,res=0;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
    
		cin>>x;
		res+=(n-(i-mp[x]));
		mp[x]=i;
		cout<<res<<endl;
	}
    return 0;
}

Ideas :

Because when sending a message , Everyone's unread messages except myself will +1. Let's assume that everyone will +1, That is, the total number of unread messages +n.
Then we subtract the message that the sender has read , use map Record the last time you read the message , use i-mp[x] It's the news that I've read ( No extra -1, because A When sending messages A also +1 了 ).
Then just add n-(i-mp[x]) Is the amount of unread messages .

原网站

版权声明
本文为[Flame car]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060919552018.html