10pts代码求助
查看原帖
10pts代码求助
1087520
sutiancheng楼主2024/9/2 21:17

蒟蒻代码:

#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

2024/9/2 21:17
加载中...