zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    BM求递推式模板
    主席树浅谈
    DSU on Tree浅谈
    树链剖分浅谈
    省选模拟八 题解
    提答题 总结
    交互题 总结
    省选模拟七 题解
    省选模拟六 题解
    省选模拟五 题解
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7066402.html
Copyright © 2011-2022 走看看