poj 树状数组入门 2352

#include <bits/stdc++.h>

using namespace std;

#define maxn 32005
int N;
int sum[maxn] , level[maxn];

inline int lowbit(int x)
{
    return x & (-x);
}

int get_sum(int x)
{
    int s = 0;
    while(x > 0)
    {
        s += sum[x];
        x -= lowbit(x);
    }
    return s;
}

void update(int x)
{
    while(x < maxn)
    {
        sum[x]++;
        x += lowbit(x);
    }
}

int main()
{
    while(~scanf("%d" , &N))
    {
        memset(sum, 0, sizeof(sum));
        memset(level, 0, sizeof(level));
        int x , y;
        int t = N;
        while(N--)
        {
            cin>>x>>y;
            x++;
            level[get_sum(x)]++;
            update(x);
        }
        for(int i=0; i<t; i++)
        cout<<level[i]<<endl;
    }
    return 0;
}

时间: 2024-10-11 18:04:13

poj 树状数组入门 2352的相关文章

{POJ}{树状数组}

总结一下树状数组的题目: {POJ}{3928}{Ping Pong} 非常好的题目,要求寻找一个数组中满足A[i]<A[k]<A[j]的个数,其中i<k<j(或者相反).很巧妙的将题目转化为树状数组的思想,从A[k]考虑,则只需要寻找左边比自己小和右边比自己大的可能性(或者相反),这样就可以用树状数组来维护.思想的转变很重要. {POJ}{1990}{MooFest} n头牛,不同的听力值v,当i,j想要通话时,需要max(v(i),v(j))*(dist[i]-dist[j])

树状数组入门

用office做了一张pdf - - 这是一维的情形,如果是二维,可以把每一行的一维树状数组看成一个节点,然后再把二维树状数组看成一维树状数组. 好文章:https://www.topcoder.com/community/data-science/data-science-tutorials/binary-indexed-trees/#prob 两道入门题:http://acm.hdu.edu.cn/showproblem.php?pid=1556 http://poj.org/problem

HDU 1166 敌兵布阵【树状数组入门题】

敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 74051    Accepted Submission(s): 31080 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务

一维树状数组入门

个人觉得非常棒的博客:https://www.cnblogs.com/xenny/p/9739600.html 第一类:单点更新,区间查询 例题:http://acm.hdu.edu.cn/showproblem.php?pid=1166 AC代码: 1 /* */ 2 # include <iostream> 3 # include <cstdio> 4 # include <cstring> 5 # include <string> 6 # includ

Binary Indexted Tree 树状数组入门

感谢http://www.cnblogs.com/xudong-bupt/p/3484080.html 树状数组(BIT)是能够完成下述操作的数据结构: 给定一初始值全为零的数列a1,a2a,a3...,an 1.给定i,计算a1+a2+...+ai 2.给定i和x,执行ai+=x BIT的结构: 数组bit[N] bit[1]=C1=A1;bit[2]=C2=C1+A2; BIT就是使用数组来维护上面所说的部分和 以1结尾的1,3,5,7长度为1 以1个0结尾的2,6长度为2 以两个0结尾的4

HDU 1166 敌兵布阵 (树状数组入门)

树状数组的引入: 对于查询和修改要求差不多,使用树状数组可以达到logN的复杂度 红色矩形表示的数组C就是树状数组.这里,C[i]表示A[i-2^k+1]到A[i]的和,而k则是i在二进制时末尾0的个数,或者说是i用2的幂方和表示时的最小指数. 所谓的k,也是该节点在树中的高度. 修改第i个元素,为了维护数组C的意义,需要修改C[i]以及C[i]的全部祖先,而非C[i]的祖先的节点则对于第i个元素的修改,不会发生改变.祖先共有"树的高度 - C[i]节点高度"个 要求区间[p,q]元素

poj2299 树状数组入门题

题意:利用树状数组求逆序数: 思路:因为输入范围较大,先离散化一下,得到的数组a记录了原来数组的大小关系:然后按下标顺序执行add(a[i],1),这样sum(a[i])得到的就是小于等于a[i]的个数,i-sum(a[i])即为a[i]前面比a[i]大的数的个数 //外循环n次并累加i-sum(a[i])得到逆序数 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<alg

树状数组入门篇2

树状数组的高效性主要就是通过将一条线段分成若干个小线段(其中每个小线段存储着2^k大小的区间和,这就将区间和问题复杂度降到了logn),而不是一个一个单一的点 add()操作修改了单点的值,同时对之后的父亲节点进行了更新(之所以只更新该点以及该点的父亲节点而不更新该点的非父亲节点,是因为求和时父亲节点直接包含该点所以会跳过该点,也就不能接受该点,所以就需要自身更新,而非父亲节点在求和时会直接加上该点,所以就不需要进行更新) 正是由于add()操作对父亲节点以及非父亲节点的区别才使每次的sum()

HDU-1166 敌兵布阵 (线段树&amp;&amp;树状数组入门)

敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视. 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:"Tid