码迷,mamicode.com
首页 > 其他好文 > 详细

Uva - 1513 Moive collection ( 模拟栈 + 树状数组基本操作 )

时间:2014-10-09 12:53:13      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   strong   

 

Uva - 1513 Moive collection ( 模拟栈 + 树状数组基本操作 )

 

题意:

一个书架,原来所有的书都是按顺序摆好的,书的编号从1开始到n

操作: 取出一本书,统计在这本书之前有多少本书,统计完之后,将这本书放在书架的第一位。

如:  1 2 3 4 5
取4   4 1 2 3 5 (取之前,有3本书在4前面,取完后,将4放在栈顶)
取4   4 1 2 3 5 (取之前,有0本书在4前面,取完后,将4放在栈顶)
取2   2 4 1 3 5 (取之前,有2本书在2前面,取完后,将2放在栈顶)

 

分析:
模拟一个栈,,用hash维护一下每本书应该在的位置。

数组开2倍的maxn

 

bubuko.com,布布扣
/* ***********************************************
ID      : whiteblock63
LANG    : G++
PROG    : Uva - 1513 Moive collection
DATE    : 2014-10-08 20:53:44
************************************************ */

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define CLR( a, b )        memset( a, b, sizeof(a) )
using namespace std;
#define MAXN 200005

int bit[MAXN];
int hash[MAXN];
void scan( int &x )
{
    char c;
    while( c = getchar(), c < 0 || c > 9 );
    x = c - 0;
    while( c = getchar(), c >= 0 && c <= 9 )    x = x*10 + c - 0;
}

void out( int x )
{
    if( x > 9 ) out( x/10 );
    putchar( x%10 + 0 );
}


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

void add( int x, int val )
{
    while( x <= MAXN )
    {
        bit[x] += val;
        x += lowbit( x );
    }
}

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

void Orz()
{
    int t, n, m, x ;
    scan( t );
    while( t-- )
    {
        scan( n ), scan( m );    
        CLR( bit, 0 );
        CLR( hash, 0 );
        for( int i = 1; i <= n; ++i )
        {
            hash[i] = i + 100000;
            add( hash[i], 1 );
        }
        for( int i = 0; i < m; ++i )
        {
            scan( x );
            int ans = sum( hash[x]-1 );
            add( hash[x], -1 );
            hash[x] = 100000 - i;
            add( hash[x], 1 );
            if( i != 0 )
            {
                putchar(   );
                out( ans );
            }
            else    
                out( ans );
            
        }
        putchar( \n );
    }
}

int main()
{
    Orz();
    return 0;
}
代码君

 

Uva - 1513 Moive collection ( 模拟栈 + 树状数组基本操作 )

标签:style   blog   http   color   io   os   ar   for   strong   

原文地址:http://www.cnblogs.com/BigBallon/p/4012298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!