zoukankan      html  css  js  c++  java
  • 数轴染色(我个渣渣)

    #include<iostream>
    #include<cstdio>
    using namespace std;
    struct data
    {    int l,r,sum;

        bool tag;
    }tr[8500001];
    int n,m;
    void build(int k,int s,int t)
    {
        tr[k].l=s;
        tr[k].r=t;
        if(s==t)
        {
              tr[k].sum=1;
              return;
        }
    int mid=(s+t)>>1;
         build(k<<1,s,mid);//build(k<<1|1,mid+1,t);//任意一个偶数经过 k<<1|1 处理后就是加一
         build((k<<1)+1,mid+1,t);//必须加() 因为<<的运算级比较小 比 + - 还小
    //二进制 或 如 (5)0101或0001 (1) ——>0101
         tr[k].sum=tr[k<<1].sum+tr[k<<1|1].sum;
    }
    void update(int k,int s,int t)
    {
         if(tr[k].tag)
         {
              tr[k].sum=0;//清零,因为都被记成白点了啊。
              tr[k<<1].tag=tr[k<<1|1].tag=1;//左右子树的tag标记为白点
              return;
    }
          int l=tr[k].l,r=tr[k].r;
          if(s==l&&t==r)//s,t是左右
          {
                tr[k].tag=1;//标记为白点
                tr[k].sum=0;
                return;
          }
          int mid=(l+r)>>1;
             if(t<=mid)update(k<<1,s,t);//
            else if(s>mid)update(k<<1|1,s,t);
                  else
                  {
                       update(k<<1,s,mid);
                       update(k<<1|1,mid+1,t);
                  }
             tr[k].sum=tr[k<<1].sum+tr[k<<1|1].sum;
    }
    int main()
    {

         scanf("%d %d",&n,&m);

           build(1,1,n);
         for(int i=1;i<=m;i++)
         {
              int l,r;
              scanf("%d %d",&l,&r);
              update(1,l,r);
             printf("%d ",tr[1].sum);
        }
    return 0;
    }

  • 相关阅读:
    ActiveMQ, Qpid, HornetQ and RabbitMQ in Comparison
    AMQP与QPID简介
    设置JVM内存溢出时快照转存HeapDump到文件
    How to find configuration file MySQL uses?
    linux命令行模式下实现代理上网
    CAS分析——Core
    单点登录加验证码例子
    统一建模语言(UML) 版本 2.0
    UML 2中结构图的介绍
    如何更改 RSA 的语言设置
  • 原文地址:https://www.cnblogs.com/ling-0-ling/p/5470003.html
Copyright © 2011-2022 走看看