玄关,10pts求调
  • 板块P4198 楼房重建
  • 楼主zzyaba
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/11/18 16:30
  • 上次更新2024/11/18 19:12:37
查看原帖
玄关,10pts求调
360025
zzyaba楼主2024/11/18 16:30

样例通过,WA on #1~9

#include<bits/stdc++.h>
#define use(A) cout<<d[A].back()<<" ";d[A].pop_back()
#define int long long
using namespace std;
struct frac{
    int x,y;
    frac(int _x=0,int _y=1):x(_x),y(_y){
    }
    bool operator<=(frac a){
        return x*a.y<=y*a.x;
    }
}x[400001];
int n,m,u,v,s[400001];
int push(int l,int r,int id,frac num){
    if(x[id]<=num){
        return 0;
    }
    if(l==r){
        return!(x[id]<=num);
    }
    if(x[id*2]<=num){
        return push((l+r)/2+1,r,id*2+1,num);
    }
    return push(l,(l+r)/2,id*2,num)+s[id]-s[id*2];
}
void modify(int pos,int num,int l=1,int r=n,int id=1){
    if(r<pos||l>pos){
        return;
    }
    if(l==pos&&pos==r){
        x[id]=frac(num,pos);
        return;
    }
    modify(pos,num,l,(l+r)/2,id*2);
    modify(pos,num,(l+r)/2+1,r,id*2+1);
    x[id]=(s[id*2]<=s[id*2+1]?x[id*2+1]:x[id*2]);
    s[id]=s[id*2]+push((l+r)/2+1,r,id*2+1,x[id*2]);
}
signed main(){
    cin>>n>>m;
    while(m--){
        cin>>u>>v;
        modify(u,v);
        cout<<s[1]<<endl;
    }
}
2024/11/18 16:30
加载中...