zoukankan      html  css  js  c++  java
  • 离散化的后续

    ↑惯例Mark大神的博客
     bzoj3289:Mato的文件管理
    线段树求逆序对+莫队,但是数据量50000却没有给出范围,既然求逆序对,那么我们关注的只是数据之间的相对大小,此时我们可以把这50000个数据进行简化...嗯看大神的博客就明白了不需要多解释什么了..
     
    下面是博客中未授权截取的大神的代码板子....不过都是自己看应该也没什么吧.....
    1 sort(sub_a,sub_a+n);
    2 int size=unique(sub_a,sub_a+n)-sub_a;//size为离散化后元素个数
    3 for(i=0;i<n;i++)
    4     a[i]=lower_bound(sub_a,sub_a+size,a[i])-sub_a + 1;//k为b[i]经离散化后对应的值
    View Code
    lower_bound上一篇刚好记录过了,下面是unique的用法....
    http://www.cnblogs.com/heyonggang/archive/2013/08/07/3243477.html
    ↑unique+unique_copy,用前记得sort把相同的数据排到一起
    unique(,)就和sort(,)里放的东西差不多...返回的是一个地址所以要-数组名,个人习惯一般从1开始赋值的所以还要-1....
    "调用unique'删除'了相邻的重复值.
    给'删除'加上引号是因为unique实际上并没有删除任何元素;
    而是将无重复的元素复制到序列的前段,从而覆盖相邻的重复元素."

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int main(){
        int a[50]={};
        a[1]=1;
        a[2]=2;
        a[3]=2;
        a[4]=5;
        a[5]=5;
        a[6]=6;
        cout<<unique(a+1,a+6+1)-a-1<<endl;
        cout<<endl;
        for(int i=1;i<=6;i++){
            cout<<a[i]<<endl;
        }
        return 0;
    }
    View Code
    以上代码输出为
    4
    1
    2
    5
    6
    5
    6
    序列若为1 2 5 5 6 6

    输出则为4 1 2 5 6 6 6
    stl真是好东西,感动
     
  • 相关阅读:
    cuda thrust函数首次调用耗费时间比后续调用长原因
    poj2823/hdu3415
    hiho1515
    hiho147周
    hdu1864/2844/2159 背包基础题
    qt + opencv
    Matlab函数编译成dll供c调用
    无处不在的编程思想
    五步使用法——搞定XMLHttpRequest
    AJAX与传统Web开发比较
  • 原文地址:https://www.cnblogs.com/137shoebills/p/7783790.html
Copyright © 2011-2022 走看看