zoukankan      html  css  js  c++  java
  • 洛谷P3901数列找不同-题解

    原题:

    思路:

    莫队

    统计的是各个数字的个数

    如果说加的时候,sum==1,则颜色种类数++

    减的时候,sum==0,则颜色种类数--

    但是要注意由于区间排了序,所以要用一种方法来保证顺序不出错。

    很简单看代码吧

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    int n,m,block;
    int a[100050];
    int sum[100050];
    int res;
    bool ans;
    int final_ans[100050];
    struct Chunk
    {
        int l,r,num;
    }chunk[100050];
    bool cmp(struct Chunk a,struct Chunk b)
    {
        return ((a.l/block)==(b.l/block))?(a.r<b.r):(a.l<b.l);
    }
    void _del(int i)
    {
        sum[a[i]]--;
        if(sum[a[i]]==0)
            res--;
    }
    void _add(int i)
    {
        sum[a[i]]++;
        if(sum[a[i]]==1)
            res++;
    }
    int main()
    {
        cin >> n >> m;
        for(int i=1;i<=n;i++)
        {
            cin >> a[i];
        }
        for(int i=1;i<=m;i++)
        {
            cin >> chunk[i].l >> chunk[i].r;
            chunk[i].num=i;
        }
        block=sqrt(n);
        int l=1;
        int r=0;
        sort(chunk+1,chunk+1+m,cmp);
        for(int i=1;i<=m;i++)
        {
            int ql=chunk[i].l;
            int qr=chunk[i].r;
            while(l<ql)
            {
                _del(l);
                l++;
            }
            while(l>ql)
            {
                l--;
                _add(l);
            }
            while(r<qr)
            {
                r++;
                _add(r);
            }
            while(r>qr)
            {
                _del(r);
                r--;
            }
            final_ans[chunk[i].num]=(qr-ql+1==res)?1:0;
        }
        for(int i=1;i<=m;i++)
            if(final_ans[i])
                cout << "Yes" << endl;
            else
                cout << "No" << endl;
        return 0;
    }
    

      

  • 相关阅读:
    Redis面试题
    spring boot错误: 找不到或无法加载主类
    JAVA的高并发编程
    Redis多机多节点集群实验
    Redis单机多节点集群实验
    Redis集群概述
    Redis的持久化之AOF方式
    Redis的持久化之RDB方式
    Redis持久化介绍
    Redis Keys的通用操作
  • 原文地址:https://www.cnblogs.com/lujin49/p/13573456.html
Copyright © 2011-2022 走看看