zoukankan      html  css  js  c++  java
  • vijos 1320 清点人数

    背景

    NK中学组织同学们去五云山寨参加社会实践活动,按惯例要乘坐火车去。由于NK中学的学生很多,在火车开之前必须清点好人数。

    描述

    初始时,火车上没有学生;当同学们开始上火车时,年级主任从第一节车厢出发走到最后一节车厢,每节车厢随时都有可能有同学上下。年级主任走到第m节车厢时,他想知道第1到m这m节车厢上一共有多少学生,但是他没有调头往回走的习惯.也就是说每次当他提问时,m总会比前一次大。

    格式

    输入格式

    第一行两个整数n,k,表示火车共有n节车厢以及k个事件。接下来有k行,按时间先后给出k个事件,每行开头都有一个字母A,B或C,如果字母为A,接下来是一个数m,表示年级主任现在在第m节车厢;如果为B,接下来两个数m,p,表示在第m节车厢有p名学生上车;如果为C,接下来两个数m,p,表示在第m节车厢有p名学生下车。学生总人数不会超过100000。

    输出格式

    有多少个A就输出多少行,每行一个整数,回答年级主任提出的问题。

    样例1

    样例输入1

    10 7
    A 1
    B 1 1
    B 3 1
    B 4 1
    A 2
    A 3
    A 10
    

    样例输出1

    0
    1
    2
    3
    

    限制

    各个测试点1s

    提示

    注意:对于30%的数据,n<=10000,k<=10000 至少有3000个A
    对于100%的数据n<=500000,k<=100000. 至少有30000个A

    来源

    命题:cauchy

    审题:彩虹阴影
    数据:彩虹阴影

    树状数组

    屠龙宝刀点击就送

    #include <cstdio>
    #define N 500005
    int tag[N],n,k;
    inline int lowbit(int x){return x&(-x);}
    inline int ask(int x)
    {
        int ret=0;
        for(;x;x-=lowbit(x)) ret+=tag[x];
        return ret;
    }
    inline void modify(int x,int y) {for(;x<=n;x+=lowbit(x)) tag[x]+=y;}
    int Main()
    {
        scanf("%d%d",&n,&k);
        char str[5];
        for(int m,p;k--;)
        {
            scanf("%s%d",str+1,&m);
            if(str[1]=='A') printf("%d
    ",ask(m));
            else 
            {
                scanf("%d",&p);
                if(str[1]=='B') modify(m,p);
                else modify(m,-p);
            }
        }
        return 0;
    }
    int sb=Main();
    int main(int argc,char *argv[]){;}
  • 相关阅读:
    uva11636-Hello World!
    POJ3083 Children of the Candy Corn(Bfs + Dfs)
    POJ2251-Dungeon Master
    使用 reqwest库,json,ajax传递api数据
    If no other git process is currently running, this probably means a git process crashed in this repo
    django配置数据驱动,python安装失败问题
    同时安装py2与py3时的pip使用问题
    Python代码之购物车
    Python代码之三级登录
    Python代码之登录接口
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7597943.html
Copyright © 2011-2022 走看看