zoukankan      html  css  js  c++  java
  • [codeVS] 1191 数轴染色

    题目描述 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 const int maxn=2e5+10;
     3 inline int min_(int x,int y){return x<y?x:y;}
     4 inline int max_(int x,int y){return x>y?x:y;}
     5 int n,m,l,r;
     6 int t[maxn<<2];
     7 void move(int k,int l,int r,int al,int ar){
     8     if(t[k]==r-l+1) return;
     9     if(l==al&&r==ar){
    10         t[k]=r-l+1;
    11         return;
    12     }
    13     int mid=l+r>>1,ls=k<<1,rs=ls|1;
    14     if(al<=mid) move(ls,l,mid,al,min_(ar,mid));
    15     if(ar>mid) move(rs,mid+1,r,max_(al,mid+1),ar);
    16     t[k]=t[ls]+t[rs];
    17 }
    18 int main(){
    19     scanf("%d%d",&n,&m);
    20     for(int i=1;i<=m;i++){
    21         scanf("%d%d",&l,&r);
    22         move(1,1,n,l,r);
    23         printf("%d
    ",n-t[1]);
    24     }
    25     return 0;
    26 }
  • 相关阅读:
    PetShop数据访问层之消息处理 《解剖PetShop》系列之三
    正则过滤汉字
    c语言 断点续传3
    c 写cgi 与socket通信
    C 语言 断点续传2
    承接B2C商城定制开发 空间+域名+风语商城系统=¥4000
    16进制 SQL注入
    c# socket传送大文件
    c写cgi cookies 设置与读取
    cgi 操作封装
  • 原文地址:https://www.cnblogs.com/J-william/p/8067413.html
Copyright © 2011-2022 走看看