T1
桶排序加枚举,把每个数存入桶中,从1跑到最大的数的桶,再去翻数字倍数的桶中有没有记录从加法枚举到乘法枚举,最后找每个存数桶中的记录
T2
差分,校门口的树升级版,l[i]表示以点i为左端点的线段个数,r[i]表示以点i为右端点的线段个数,然后画一下图都能转化成同一种情况
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
l[a]++;//以a为左端点的线段个数
r[b]++;//同上(右端点)
you=max(you,b);
}
for(int i=1;i<=you;i++)
{
ans+=(l[i]-r[i-1]);//线段等价平移
if(ans>maxx)
{
maxx=ans;
maxz=i;
}
}
T3
辣鸡并查集裸题