zoukankan      html  css  js  c++  java
  • 差分数组——面对大数据的处理

     题目链接:https://www.luogu.com.cn/problem/CF1000C

    解决思路:

    总体上是差分数组,但是可以知道r的上限太大了,我们不能开那么大的数组

    解决思路是就记录端点即可,使用map记录

    #include <iostream>
    #include <map>
    using namespace std;
    long long int cun[200010];
    map<long long int, long long int>num;
    map<long long int, long long int>::iterator it;
    int main()
    {
        long long int n;
        long long int l, r;
        cin >> n;
        
        for (int i = 1; i <= n; i++)
        {
            
            cin >> l >> r;
            num[l]++;
            num[r + 1]--;
        }//以上和差分数组完全一致
        long long int cnt = 0;
        it=num.begin();
        long long int cmp = it->first;
    
        for ( it = num.begin(); it != num.end(); it++)//巧妙之处
        {//cnt的计算和差分数组计算次数的方法一样
            cun[cnt] += it->first-cmp;//能算出这个点距离上次出现的端点多远了
            cmp = it->first;
            cnt += it->second;
        }
        for (int i = 1; i <= n; i++)
        {
            if (i != 1)cout << " ";
            cout << cun[i];
        }
        return 0;
    }
  • 相关阅读:
    JAVA 练习1
    JSP基础
    网络协议
    mysql基础
    python之高级
    powershell基础
    python之迭代器与遍历
    python之面向对象
    linux常用命令
    docker 安装 ElasticSearch:7.4.2
  • 原文地址:https://www.cnblogs.com/Knightero/p/12961053.html
Copyright © 2011-2022 走看看