線段樹維護單調棧

單點修改,維護元素個數。O(nlog2n)O(n\log^2 n)

如果只是插入元素,那麼二分修改即可一個log。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
double Max[400010];
int sum[400010];
inline int read()
{
    char c=getchar();int x=0,flag=1;
    while(!isdigit(c)){if(c=='-') flag=-1;c=getchar();}
    while(isdigit(c)) x=x*10+c-'0',c=getchar();
    return x*flag;
}
int query(int root,int l,int r,double k)
{
    if(l==r) return Max[root]>k;
    if(Max[root]<=k) return 0;
    int mid=l+r>>1;
    if(Max[root<<1]<=k) return query(root<<1|1,mid+1,r,k);
    else return query(root<<1,l,mid,k)+sum[root]-sum[root<<1];
}
void update(int root,int l,int r,int x,double k)
{
    if(l==r)
    {
        sum[root]=1;
        Max[root]=k;
        return;
    }
    int mid=l+r>>1;
    if(x<=mid) update(root<<1,l,mid,x,k);
    else update(root<<1|1,mid+1,r,x,k);
    Max[root]=max(Max[root<<1],Max[root<<1|1]);
    sum[root]=sum[root<<1]+query(root<<1|1,mid+1,r,Max[root<<1]);
}
int main()
{
    int n=read(),m=read();
    for(int i=1;i<=m;i++)
    {
        int x=read(),y=read();
        update(1,1,n,x,1.0*y/x);
        cout<<sum[1]<<'\n';
    }
    return 0;
}

發佈了89 篇原創文章 · 獲贊 26 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章