题目大意:
输入t行,每行代表的A[i]将在第i秒后增加B,且A[i]除了加上B以外不会有其他变化。
输出T行,表示A[i]的分数在i-0.5秒时数字会有几种不同的状态。
思路:
用map存储i秒时A[i]增加得分,B[i]作为key,A[i]value,可以非常快速统计出某一时刻所有分数总数。
用另一个map存储每个A[i]的分数,A[i]作为key, 分数作为value。
A[i]被移除了, 需要使用erase方法消除分数key。
参考程序:
#include<bits/stdc++.h>
using namespace std;
int n,t;
map<long long,set<int>> ans; //每个时间段的得分选手和分数
map<int,long long> num; //每个选手的分数
int main(){
cin>>n>>t;
for(int i=1;i<=n;i++){
ans[0].insert(i);
num[i] = 0;
}
for(int i=0;i<t;i++){
int a,b;
cin>>a>>b;
long long one=num[a];
long long two=num[a]+b;
ans[one].erase(a);
if(ans[one].size() == 0){
ans.erase(ans.find(one));
}
num[a]=two;
ans[two].insert(a);
cout<<ans.size()<<endl;
}
return 0;
}