离散常用操作

#include<bits/stdc++.h>
using namespace std;
int n,m,t,x[101000],y[101000],a[201000];
int main()
{
    scanf("%d%d",&n,&m);t=0;
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&x[i],&y[i]);
        a[++t]=x[i];a[++t]=y[i];
    }
    sort(a+1,a+t+1);
    t=unique(a+1,a+n+1)-a-1;//t就是所去重以后的数组长度,虽然我也不知道为什么要再减1...
    for(int i=1;i<=m;i++)
    {
        x[i]=lower_bound(a+1,a+n+1,x[i])-a;
        y[i]=lower_bound(a+1,a+n+1,y[i])-a;
        //lower_bound返回一个迭代器,指向键值>= key的第一个元素。
        //upper_bound返回一个迭代器,指向键值> key的第一个元素。
    }
    return 0;
}
 

随便敲一敲,熟悉一下,顺便做个笔记以便于下次找

posted @ 2020-09-03 10:10  mybing  阅读(148)  评论(0编辑  收藏  举报