蒟蒻代码:
#include<iostream>
#define ls x<<1
#define rs x<<1|1
using namespace std;
int n,m;
double h[100005];
struct node
{
double mx;
int l,r,s;
}a[400005];
void pushup(int x){a[x].mx=max(a[ls].mx,a[rs].mx);}
void build(int x,int l,int r)
{
a[x].l=l,a[x].r=r;
if(l==r)return;
int mid=(l+r)>>1;
build(ls,l,mid);
build(rs,mid+1,r);
}
int find(double lx,int x)
{
if(a[x].mx<=lx)return 0;
if(h[a[x].l]>x)return a[x].s;
if(a[x].l==a[x].r)return 0;
int mid=(a[x].l+a[x].r)>>1;
if(a[ls].mx<=x)return find(lx,rs);
return find(lx,ls)+a[x].s-a[ls].s;
}
void change(int x,int po,int he)
{
if(a[x].l==a[x].r)
{
a[x].mx=he/po*1.0;
a[x].s=1;
return;
}
if(po<=a[ls].r)change(ls,po,he);
else change(rs,po,he);
pushup(x);
a[x].s=a[ls].s+find(a[ls].mx,rs);
}
int main()
{
cin>>n>>m;
build(1,1,n);
for(int i=1,x,y;i<=m;i++)
{
cin>>x>>y;
h[x]=y/x*1.0;
change(1,x,y);
cout<<a[1].s<<'\n';
}
return 0;
}
和这篇题解 很像,但本蒟蒻居然没有发现错误QwQ