• 1191 数轴染色


    1191 数轴染色

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
     
    题目描述 Description

    在一条数轴上有N个点,分别是1~N。一开始所有的点都被染成黑色。接着
    我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色。请输出每个操作执行后
    剩余黑色点的个数。

    输入描述 Input Description

    输入一行为N和M。下面M行每行两个数Li、Ri

    输出描述 Output Description

    输出M行,为每次操作后剩余黑色点的个数。

    样例输入 Sample Input

    10 3
    3 3
    5 7
    2 8

    样例输出 Sample Output

    9
    6
    3

    数据范围及提示 Data Size & Hint

    数据限制
    对30%的数据有1<=N<=2000,1<=M<=2000
    对100%数据有1<=Li<=Ri<=N<=200000,1<=M<=200000

     1 #include <cstdio>
     2 using namespace std;
     3 
     4 int n,m,tree[800100],x,y;
     5 
     6 void build(int x,int l,int r)        //建树
     7 {
     8     if (l==r)
     9     {
    10         tree[x]=1;
    11         return;
    12     }
    13     int m=(l+r)/2;
    14     build(x*2,l,m);
    15     build(x*2+1,m+1,r);
    16     tree[x]=tree[x*2]+tree[x*2+1];
    17 }
    18 
    19 void change(int x,int l,int r,int ql,int qr)      //单点修改
    20 {
    21     if (l>qr||r<ql||tree[x]==0) return;
    22     if (l>=ql&&r<=qr) 
    23     {
    24         tree[x]=0;
    25         return;
    26     }
    27     int m=(l+r)/2;
    28     change(x*2,l,m,ql,qr);
    29     change(x*2+1,m+1,r,ql,qr);
    30     tree[x]=tree[x*2]+tree[x*2+1];
    31     return;
    32 }
    33 
    34 int main()
    35 {
    36     scanf("%d%d",&n,&m);
    37     build(1,1,n);
    38     for (int i=1; i<=m; i++)
    39     {
    40         scanf("%d%d",&x,&y);
    41         change(1,1,n,x,y);
    42         printf("%d
    ",tree[1]);             //直接输出和
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    JSP----获取表单参数
    application 从web.xml中获取初始化参数
    使用定时器分解任务
    无阻塞加载外部js(动态脚本元素,XMLHttpRequest注入,LazyLoad)
    ReactJs 入门DEMO(转自别人)
    带你一分钟理解闭包--js面向对象编程(转载他人)
    使用SqlBulkCopy进行批量数据插入
    AngularJsDEMO
    ECharts
    C#发送邮件DEMO
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7066402.html
Copyright © 2020-2023  润新知