zoukankan      html  css  js  c++  java
  • LOJ10114 数星星(树状数组)

    地址:https://loj.ac/problem/10114

         解析:由于坐标是按y递增排序,所以对于一个点来讲,只看之前x小于等于它的就可以了。那么对于输入的每个点,求之前x小于等于它的,就得用树状数组维护。树状数组c[i]表示x=i时,它之前x小于等于它的有几个点。个数就是级数,num[]来记录。x+1防止死循环

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    const int maxn=32001;
    int num[maxn];
    int c[maxn];
    int lowbit(int i)
    {
        return i&(-i);
    }
    void update(int x)
    {
        for(int i=x;i<=maxn;i+=lowbit(i))
            c[i]++;
    }
    int getsum(int x)
    {
        int sum=0;
        for(int i=x;i>0;i-=lowbit(i))
        {
            sum+=c[i];
        }
        return sum;
    }
    int main()
    {
        int n;
        cin>>n;
        int x,y;
        for(int i=1;i<=n;i++)
        {
            cin>>x>>y;
            x++;
            num[getsum(x)]++;
            update(x);
        }
        for(int i=0;i<n;i++)
            cout<<num[i]<<endl;
    }
  • 相关阅读:
    js返回到顶部
    css培训一
    css常用hack技巧
    css培训二
    css样式渲染规则
    html语义(一)
    css样式表管理
    html+css培训方案
    继承
    封装
  • 原文地址:https://www.cnblogs.com/liyexin/p/12853300.html
Copyright © 2011-2022 走看看