10pts 悬赏关注
  • 板块P4198 楼房重建
  • 楼主koobee
  • 当前回复3
  • 已保存回复4
  • 发布时间2023/11/19 14:53
  • 上次更新2023/11/19 16:48:54
查看原帖
10pts 悬赏关注
365296
koobee楼主2023/11/19 14:53
#include<bits/stdc++.h>
using namespace std;
const int N = 2e6+5;
int n, m, cnt=1, lf[N], rt[N];
struct node{
	int sum;
	double mx;
} t[N];
void build(int x, int l, int r){
	if(l == r) return;
	int mid = (l + r) / 2;
	lf[x] = ++cnt, build(lf[x], l, mid);
	rt[x] = ++cnt, build(rt[x], mid+1, r);
}
int query(int x, int l, int r, double k){
	if(t[x].mx <= k) return 0;
	if(l == r) return 1;
	int mid = (l + r) / 2;
	if(t[lf[x]].mx <= k) return query(rt[x], mid+1, r, k);
	return query(lf[x], l, mid, k);
}
void modify(int x, int l, int r, int pos, double v){
	if(l == r){
		t[x].mx = v, t[x].sum = 1;
		return;
	}
	int mid = (l + r) / 2;
	if(pos <= mid) modify(lf[x], l, mid, pos, v);
	else modify(rt[x], mid+1, r, pos, v);
	t[x].mx = max(t[lf[x]].mx, t[rt[x]].mx);
	t[x].sum = t[lf[x]].sum + query(rt[x], mid+1, r, t[lf[x]].mx);
}
int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin>>n>>m;
	build(1, 1, n);
	while(m--){
		int a, b;
		cin>>a>>b;
		modify(1, 1, n, a, 1.0*b/a);
		cout<<t[1].sum<<"\n";
	}
	return 0;
}
2023/11/19 14:53
加载中...