zoukankan      html  css  js  c++  java
  • 洛谷 U41571 Agent2

    题目背景

    炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的。每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了。只有不咕鸟Lyn_king一个人冒着太阳等了半个多小时,然后居然看到连ENLIGHTENED行动参谋咕咕咕了,果然咕咕咕是人类的本性啊。

    题目描述

    作为一个ENLIGHTENED行动指挥,自然不想看到这一点,于是他偷取到了那些经常咕咕咕Agent的在下来NN天的活动安排表,并且叫上了你来整理。在整理过程中,ENLIGHTENED行动指挥对你说了MM条命令,命令操作如下。

    1. 输入$0​$ $a​$ $b​$,这代表在第$a​$天到第$b​$天,有一名Agent要咕咕咕。
    2. 输入1aa,这代表ENLIGHTENED行动指挥询问你根据目前的信息,在第aa天有多少名Agent会咕咕咕。

    作为同是不咕鸟的你,也想要惩戒那些经常咕咕咕的人,所以,请协助完成ENLIGHTENED行动指挥完成整理,并且在他每次询问时,输出正确的答案。

    输入输出格式

    输入格式:

     

    第一行输入两个整数输N,MN,M, 下来MM行,每行输入一个命令,命令格式见题目描述。

     

    输出格式:

     

    对于每一次询问的操作,都要输出询问的答案。答案之间用换行隔开。

     

    输入输出样例

    输入样例#1: 复制
    5 5
    0 1 2
    0 1 5
    1 1
    0 3 5
    1 5
    输出样例#1: 复制
    2
    2

    说明

    对于20\%20%的数据 N,M leq 10N,M10

    对于40\%40%的数据 N,M leq 10^3N,M103

    对于60\%60%的数据 N,M leq 10^5N,M105

    对于100\%100%的数据 1 leq a,b leq N leq 10^7,M leq 4*10^51a,bN107,M4105

    /*第一思路:线段树,数据范围是1e7感觉要mle,或许可以用树状数组搞一下 
      第二思路:前缀和维护差分序列,但最多支持10次询问,感觉也要gg*/
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,m;
    int tree[10000011],num[10000011];
    int lowbit(int t){
        return t&(-t);
    }
    void change(int x,int opt){
        for(int i=x;i<=n;i+=lowbit(i))
            tree[i]+=opt;
    }
    int query(int x){
        int bns=0;
        for(int i=x;i>0;i-=lowbit(i))
            bns+=tree[i];
        return bns;
    }
    int main(){
        scanf("%d%d",&n,&m);
        /*思路二  45分*/
        /*for(int i=1;i<=m;i++){
            int opt;scanf("%d",&opt);
            if(opt==0){
                int x,y;
                scanf("%d%d",&x,&y);
                num[x]+=1;num[y+1]-=1; 
            }
            else if(opt==1){
                int x;scanf("%d",&x);
                for(int i=1;i<=x;i++)
                    sum[i]=sum[i-1]+num[i];
                cout<<sum[x]<<endl;
            }
        }*/
        /*思路一 100*/
        for(int i=1;i<=m;i++){
            int opt;scanf("%d",&opt);
            if(opt==0){
                int x,y;scanf("%d%d",&x,&y);
                change(x,1);
                change(y+1,-1);
            }
            else if(opt==1){
                int x;scanf("%d",&x);
                cout<<query(x)<<endl;
            }
        } 
        
    }

     

  • 相关阅读:
    OLED的相关信息
    FilterDispatcher is depredated!plesae use the new filters
    lua c函数注册器
    一个简易版本的lua debugger实现
    【Unity Shaders】Using Textures for Effects——让sprite sheets动起来
    GDAL库中WFS服务中含有中文不能获取数据的问题
    golang:使用timingwheel进行大量ticker的优化
    扩展GDAL,支持CNSDTF格式(一)
    理解WebKit和Chromium: Android 4.4 上的Chromium WebView
    学习tornado:异步
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/9748350.html
Copyright © 2011-2022 走看看