前缀和与差分——幸运线段

从0开始的数轴,便指定了m(m<=1000000)个线段[l, r],然后给出q(q<=1000000)询问,一个区间段[a, b]内是不是全部被线段覆盖.

输入格式:

第一行是一个整数m,表示他指定的幸运线段的个数

接下来m行,每行是两个正整数l,r(0<=l<r<=1000000),表示一个幸运线段.

接下来一行是一个整数q(q<=1000000),表示询问的个数.

接下来q行,每行两个正整数a,b,(0<=a<b<=1000000)表示一个去区间段.

输出格式:

针对每次查询,如果该区间段完全被幸运线段覆盖,就输出"GoodLuck!"(不含引号),否则输出"No!"(不含引号)

输入样例:

在这里给出一组输入。例如:

4 0 2 3 4 3 5 5 6 3 1 2 1 3 3 6

输出样例:

在这里给出相应的输出。例如:

GoodLuck!
No!
GoodLuck!

n,m这种可以用cin
大量输入用cin会超时

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;

int dif[maxn];
int a[maxn];

int main(){
    int m;
    int l,r;
    cin >> m;
    while(m--){
        scanf("%d %d", &l, &r);
        dif[++l]++;
        dif[++r]--;
    }
    for(int i=1; i<maxn; i++)
        a[i] = dif[i] + a[i-1];
    for(int i=0; i<maxn; i++)
        if(a[i]) a[i] = 1;
    for(int i=1; i<maxn; i++)
        a[i] += a[i-1];
    
    int q;
    cin >> q;
    while(q--){
        scanf("%d %d", &l, &r);
        if(r-l == a[r]-a[l])
            puts("GoodLuck!");
        else
            puts("No!");
    }
    return 0;
}


发布了62 篇原创文章 · 获赞 0 · 访问量 1748

猜你喜欢

转载自blog.csdn.net/jhckii/article/details/104399267