从这个题学到了一些关于set的知识点,在自己另一个博客总结了一点,之前一直没做出来,是因为在set中不会删除全部元素,通过学习这篇博客https://blog.youkuaiyun.com/bbbbswbq/article/details/79839832
我总结了一些set的知识点
下面是ac代码:
#include <bits/stdc++.h>
using namespace std;
struct node
{
int id,s,t;
bool operator<(const node &x)const
{
if(x.s==s)
{
if(x.t==t)
{
return id<x.id;
}
return t<x.t;
}
return s>x.s;
}
} a[100001];
set<node>st;
int n,m;
int main()
{
scanf("%d %d",&n,&m);
for(int i=1; i<=n; i++)
{
a[i].id=i;
a[i].s=0;
a[i].t=0;
}
while(m--)
{
int u,v;
scanf("%d %d",&u,&v);
set<node>::iterator it;
it=st.find((node){u,a[u].s,a[u].t});
if(it!=st.end())
{
st.erase(it);
}
a[u].s++;
a[u].t+=v;
node t1=(node){1,a[1].s,a[1].t};
node t2=(node){u,a[u].s,a[u].t};
if(u!=1)
{
if(t2<t1)
{
st.insert(t2);
}
}
else
{
while(!st.empty()&&(t1<*(--st.end())))
{
st.erase(--st.end());
}
}
printf("%d\n",st.size()+1);
}
return 0;
}