离散化

Posted liukx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了离散化相关的知识,希望对你有一定的参考价值。

这道题最刻骨铭心的是

。。。离散化数组要开大

https://www.luogu.com.cn/problem/P1955

技术图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 using namespace std;
 6 typedef long long ll;
 7 #define N 100050
 8 int T,n;
 9 int fa[N];
10 ll b[N<<2];
11 struct node{
12     ll l,r;
13     int w;
14     bool operator <(const node &x)const{
15     return w>x.w;}
16 }e[N];
17 int find(int x){
18     return fa[x]==x?x:fa[x]=find(fa[x]);
19 }
20 int main(){
21     scanf("%d",&T);
22     while(T--){
23         memset(b,0,sizeof(b));
24         memset(e,0,sizeof(e));
25         scanf("%d",&n);
26         int len=0,flag=0;
27         for(int i=1;i<=n;i++){
28             scanf("%lld%lld%d",&e[i].l,&e[i].r,&e[i].w);
29             b[++len]=e[i].l;b[++len]=e[i].r;
30         }
31         sort(b+1,b+1+len);int m=unique(b+1,b+1+len)-b-1;
32         for(int i=1;i<=n;i++){
33             e[i].l=lower_bound(b+1,b+1+m,e[i].l)-b;
34             e[i].r=lower_bound(b+1,b+1+m,e[i].r)-b;
35         }
36         for(int i=1;i<=m;i++)fa[i]=i;
37         sort(e+1,e+1+n);
38         for(int i=1;i<=n;i++){
39             int fx=find(e[i].l),fy=find(e[i].r);
40             if(e[i].w){
41                 if(fx!=fy)fa[fx]=fy;
42             }
43             else{
44                 if(fx==fy){puts("NO");flag=1;break;}
45             }
46         }
47         if(!flag)puts("YES");
48     }
49     return 0;
50 }
1
技术图片
int len=0;
int len=0,flag=0;
for(int i=1;i<=n;i++){
    scanf("%lld%lld%d",&e[i].l,&e[i].r,&e[i].w);
    b[++len]=e[i].l;b[++len]=e[i].r;
}
sort(b+1,b+1+len);int m=unique(b+1,b+1+len)-b-1;
for(int i=1;i<=n;i++){
    e[i].l=lower_bound(b+1,b+1+m,e[i].l)-b;
    e[i].r=lower_bound(b+1,b+1+m,e[i].r)-b;
}
离散化

 

以上是关于离散化的主要内容,如果未能解决你的问题,请参考以下文章

离散化的思想和它的两种代码与区别

数据离散化

AcWing 2014. 岛(离散化+差分)

Matlab的Simulink连续模型离散化代码自动生成C语言(简明教程)

基本算法——离散化

坐标离散化