• vijos P1448 校门外的树


    描述

    校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的……
    如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作:
    (K=1),读入(l,r)表示在区间([l,r])中种上一种树,每次操作种的树的种类都不同
    (K=2),读入(l,r)表示询问([l,r])之间能见到多少种树((l,r>0))

    输入格式

    第一行$n,m$表示道路总长为$n$,共有$m$个操作
    接下来$m$行为$m$个操作

    输出格式

    对于每个$K=2$输出一个答案

    提示

    范围:

    $20\%$的数据保证$n,m<=100$
    $60\%$的数据保证$n<=1000,m<=50000$
    $100\%$的数据保证$n,m<=50000$

      由于这两天$BZOJ$炸了,于是准备上$vijos$刷点题……然后发现刷不动……我好弱啊……

      由于这道题想了半天不会做,被嘲讽数据结构学傻了……好吧,这几天我整天整天的不在状态

      好吧,我还是来讲一下写法(其实这道题的在$vijos$上就有非常详细的讲解了)。这道题目大意就是给出一些区间,每次询问一个区间和多少个区间有交。

      然后,一个区间和另一个区间有交,当且仅当那个区间的左端点或者右端点在这个区间里。于是,我们就可以令$a_{i}$表示前$i$个点共出现了多少个区间左端点,$b_{i}$表示出现了多少个右端点。这两个东西用树状数组维护即可。询问区间$[l,r]$的答案就是$a_{r}-b_{l-1}$。

      下面贴代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
    #define maxn 50010
     
    using namespace std;
    typedef long long llg;
     
    int c1[maxn],c2[maxn];
    int n,m;
     
    int getint(){
        int w=0;bool q=0;
        char c=getchar();
        while((c>'9'||c<'0')&&c!='-') c=getchar();
        if(c=='-') c=getchar(),q=1;
        while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();
        return q?-w:w;
    }
     
    void add1(int x,int y){while(x<=n) c1[x]+=y,x+=x&(-x);}
    void add2(int x,int y){while(x<=n) c2[x]+=y,x+=x&(-x);}
    int sum1(int x){
        int t=0;
        while(x) t+=c1[x],x-=x&(-x);
        return t;
    }
    int sum2(int x){
        int t=0;
        while(x) t+=c2[x],x-=x&(-x);
        return t;
    }
     
    int main(){
        File("a");
        n=getint(); m=getint();
        while(m--){
            int ty=getint(),l,r;
            l=getint();r=getint();
            if(ty==1) add1(l,1),add2(r,1);
            else printf("%d
    ",sum1(r)-sum2(l-1));
        }
    }
     
  • 相关阅读:
    go并发和并行
    goroutine
    go并发
    wampserver配置问题
    获取字符串的长度
    mysql中事件失效如何解决
    Go语言中Goroutine与线程的区别
    Mosquitto服务器的日志分析
    phpexcel导出数据 出现Formula Error的解决方案
    Centos6.X 手动升级gcc
  • 原文地址:https://www.cnblogs.com/lcf-2000/p/5932741.html
Copyright © 2020-2023  润新知