zoukankan      html  css  js  c++  java
  • 【】染色

    【链接】h在这里写链接


    【题意】


    【问题描述】
        在一条数轴上有N个点,分别为1~N。一开始所有的点都被染成黑色。接着我们进行M次操作,第i次
        操作将[Li,Ri]这些点染成白色。请输出每个操作执行后剩余黑色点的个数。
    【输入格式】
        输入一行为N和M。下面m行每行两个数Li、Ri。
    【输出格式】
        输出M行,为每次操作后剩余黑色点的个数。
    【输入样例】
        10 3
        3 3
        5 7
        2 8

    【输出样例】
        9
        6
        3
    【数据范围】
        对30%的数据有1<=N<=2000,1<=M<=2000;
        对60%的数据有1<=N<=200000,1<=M<=200000;
        对100%的数据有1<=Li<=Ri<=N<=1000000,1<=M<=1000000(后4点时限为1.1s);


    【题解】


        题解:
            并查集
            中间的点走过之后,就把它和这个区间的最右边那个点连起来。
            这样。下次到达这个点的时候就能直接跳过了。
            统计新走了几个点,减掉就好。

    【错的次数】


    0

    【反思】


    在这了写反思

    【代码】

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 100e4;
    
    int n, m, f[N+10];
    
    int ff(int x) {
        if (f[x] == x)
            return x;
        else
            return f[x] = ff(f[x]);
    }
    
    int main() {
        //freopen("F:\rush.txt", "r", stdin);
        scanf("%d%d", &n, &m);
        for (int i = 1; i <= n + 1; i++)
            f[i] = i;
        for (int i = 1; i <= m; i++) {
            int l, r;
            scanf("%d%d", &l, &r);
            if (l > r) swap(l, r);
            for (int i = ff(l); i <= r; f[i] = i + 1, i = ff(i)) n--;
            printf("%d
    ", n);
        }
        return 0;
    }


  • 相关阅读:
    iOS加载动态图的两种方法
    python初探
    博客园封笔
    office的分栏技巧
    关于排序...
    LaTex 学习笔记
    vim 学习笔记
    iOS 编程学习笔记之Foundation框架
    数论
    扫描线概览
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626032.html
Copyright © 2011-2022 走看看