NBUT 1566 格式化 数组模拟区间覆盖问题

伟大的程序员——TT的电脑里有N份数据,分别编号从1到N。同事QAQ嫉妒他的能力,趁TT不在的时候把TT电脑里的数据给格式化了!(卧槽没想到QAQ居然是这样的人,怎么能格式化T^T的电脑呢!应该把它拿走呀,里面肯定有很多珍贵的资源呀~~比如说吊炸天的新OJ源代码呀~)
Input
有多组测试数据,每组输入第一个为一个正整数N(4 <= N <= 50,000)。 接下来一行包含一个正整数Q(4 <= Q <= 50,000)表示QAQ的操作次数。 接下来Q行,每行包含两个数x和y(1 <= x <= y <= N),表示QAQ将编号为x到y的数据给格式化了。
Output
对于QAQ的每次操作,输出QAQ此次操作后,还有多少数据没有被格式化。
(T^T:给我留点啊~)
SampleInput
100
5
3 10
2 7
16 20
1 99
54 78
SampleOutput
92
91
86
1
1

题意明显易懂 看到这题应该就是线段树区间更新+区间查询 但是看到某学长的神仙代码于是写个博客记录下
先上代码

#include <iostream>
#include <cstring>

using namespace std;

int a[50005];

int main()
{
    int n;
    ios::sync_with_stdio(false);

    while(cin >> n)
    {
        memset(a,0,sizeof(a));
        
        int q;

        int l,r;

        cin >> q;

        while(q--)
        {
            cin >> l >>  r;

            for(int i = l ; i <= r ;i++)
            {
                if(a[i]>=r)
                    break;

                if(!a[i])
                    n--;

                a[i] = r;
            }

            cout << n << endl;
        }
    }

    return 0;
}

通过样例模拟可以得知 当输入3 7时 3~7这个区间内数组值均为0 所以n减去了7 最为关键的一点是 将区间内的值 赋值成了区间的边界 当再输入 2 10 的时候 a[2]的值还是0 所以n的值少1 但a[3]的值已经在上次查询中更新成了右边界 这部分已经遍历过了 结束循环 以此类推

发布了54 篇原创文章 · 获赞 0 · 访问量 1210

猜你喜欢

转载自blog.csdn.net/weixin_44144278/article/details/103025321