离散化的两种实现方式【sort或者map】

离散化

定义

把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。
适用范围:数组中元素值域很大,但个数不是很多。
比如将a[]=[1,3,100,2000,500000]映射到[0,1,2,3,4]这个过程就叫离散化。

两种离散化方式

1.利用sort+unique进行数据离散化(适用于区间查找,及更新)

常与前缀和、树状数组、线段树和动态规范结合考查。

先来看一个金典题目:
题目
假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。
现在,我们首先进行 n次操作,每次操作将某一位置 x 上的数加 c。
接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [ l , r ] 之间的所有数的和。

输入格式:
第一行包含两个整数 n 和 m。
接下来 n行,每行包含两个整数 x 和 c。
再接下来 m 行,每行包含两个整数 l 和 r。

输出格式:
共 m 行,每行输出一个询问中所求的区间内数字和。

数据范围:
−109 ≤ x ≤ 109

1 ≤ n ≤ 105

1 ≤ m ≤ 105

−109 ≤ l ≤ r ≤ 109

− 10000 ≤ c ≤ 10000
输入样例
3 3
1 2
3 6
7 5
1 3
4 6
7 8
输出样例
8
0
5
思路:
由于1 ≤ n ≤ 105 和1 ≤ m ≤ 105 所调用的数字范围较小,而数轴范围较大,故可以将通过离散化处理,将−109 ≤ x ≤ 109
范围缩为 −105 ≤ x ≤ 105 左右,大大提高效率。
在这里插入图片描述
代码

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int, int> PII;
const int N = 3 * 1e5 + 10;
int a[N], s[N];
vector<int> alls;
vector<PII> add, query;

// 二分查找
int find(int x)
{
	int l = 0, r = alls.size() - 1;
	while (l < r)
	{
		int mid = l + ((r - l) >> 1);
		if (alls[mid] >= x) r = mid;
		else l = mid + 1;
	}
	return l + 1; // 由于S是从1开始的,所以对应映射位置都往前提一位
}
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; ++i)
	{
		int x, c;
		cin >> x >> c;
		add.push_back({x, c});
		alls.push_back(x);
	}
	for (int i = 0; i < m; ++i)
	{
		int l, r;
		cin >> l >> r;
		query.push_back({l, r});
		alls.push_back(l);
		alls.push_back(r);
	}
	sort(alls.begin(), alls.end());
	alls.erase(unique(alls.begin(), alls.end()), alls.end());
	for (auto& item : add)
	{
		int x = find(item.first);
		a[x] += item.second;
	}
	for (int i = 1; i <= alls.size(); ++i) s[i] = s[i - 1] + a[i];
	for (auto& item : query)
	{
		int l = find(item.first), r = find(item.second);
		cout << s[r] - s[l - 1] << endl;
	}
	return 0;
}

当然这里也可以用数组+lower_bound来做,下面会说

1.1 Mayor’s posters POJ - 2528

在这里插入图片描述
思路:
可以将问题转化为,求区间的最小值,让每个区间的海报标记为第i个放的,然后用线段树来做。
查询每个海报区间的最小值是否等于i,如果等于i则没有被完全覆盖。本题的数据量太大,区间是[1, 1e7],
所以要用离散化,存取l和r的相对大小,因为n = 1e4,所以离散过后的区间为[1, 2 * n]。
时间复杂度O(nlogn)

#include<cstdio>
#include<map>
#include<iostream>
#include<algorithm>
#define ls 		rt << 1, l, m
#define rs 		rt << 1 | 1,  m + 1, r
using namespace std;
const int maxn = 2e4 + 5;
int mi[maxn << 2], a[maxn], add[maxn<<2];
struct node{
	int l, r, pos;
}arr[maxn];
int n;
void pushUp(int rt){
	mi[rt] = min(mi[rt << 1], mi[rt << 1 | 1]);
}
//下推标记 
void pushDown(int rt){
	add[rt << 1] = add[rt];
	add[rt << 1 | 1] = add[rt];
	mi[rt << 1] = add[rt];
	mi[rt << 1 | 1] = add[rt];
	add[rt] = 0;
}
//建树,此过程可用memset代替 
void build(int rt, int l, int r){
	if (l == r){
		mi[rt] = 0;
		return;
	}
	int m = (l + r) >> 1;
	build(ls);
	build(rs);
	pushUp(rt);
}
//区间修改 
void update(int rt, int l, int r, int L, int R, int C){
	if (L <= l && r <= R){
		mi[rt] = C;
		add[rt] = C;
		return;
	}
	if(add[rt] != 0)	pushDown(rt);
	int m = (l + r) >> 1;
	if (L <= m)		update(ls, L, R, C);
	if (m < R)		update(rs, L, R, C);
	pushUp(rt);
}
//查询区间最小值 
int query(int rt, int l, int r, int L, int R){
	if (L <= l && r <= R){
		return mi[rt];
	}
	if (add[rt] != 0)	pushDown(rt);
	int m = (l + r) >> 1;
	int res = maxn;
	if (L <= m)		res = min(res, query(ls, L, R));
	if (m < R)		res = min(res, query(rs, L, R));
	return res;
}
//离散化 
void disc(int cnt){
	sort(a, a + cnt);
	int lena = unique(a, a + cnt) - a;
	for (int i = 0; i < n; ++i){
		arr[i].l = lower_bound(a, a + lena, arr[i].l) - a + 1;
		arr[i].r = lower_bound(a, a + lena, arr[i].r) - a + 1;
	//	printf("l = %d   r = %d\n", arr[i].l, arr[i].r);
	}
}
void solve(){
	scanf("%d", &n);
	build(1, 1, n << 1);
	int cnt = 0;
	for (int i = 0; i < n; ++i){
		scanf("%d%d", &arr[i].l, &arr[i].r);
		arr[i].pos = i + 1;
		a[cnt++] = arr[i].l;
		a[cnt++] = arr[i].r;
	}
	disc(cnt);
	for (int i = 0; i < n; ++i){
		update(1, 1, n << 1, arr[i].l, arr[i].r, arr[i].pos);
	} 
	int ans = 0;
	for (int i = 0; i < n; ++i){
		int x = query(1, 1, n << 1, arr[i].l, arr[i].r);
		//printf("x = %d\n", x);
		if (x == arr[i].pos)	ans++;
	}
	printf("%d\n", ans);
}
int main(){
	int t;
	scanf("%d", &t);
	for (int i = 0; i < t; ++i) solve();
	return 0;
}

1.2 Mayor’s posters POJ - 2528

/*
需要计划你接下来k天的日程。在每一天里.她可以选择学习或者颓废,但是为了劳逸结合,日程表有两类限制:
1、在某个时间段中至少有一天要学习。
2、在某个时间段中至少有一天要颓废。
请问一共有多少种合法的日程表?答案对1000000007取模。
输入格式
第一行三个非负整数k,n,m,分别表示天数,至少有一天学习的时间段个数和至少有一天颓废的时间段个数。
接下来n行,每行两个正整数l,r,表示第l至第r天中至少有一天学习。
接下来m行.每行两个正整数l,r,表示第l至第r天中至少有一天颓废。
输出格式
一行一个整数,表示答案对1000000007取模后的结果。
样例输入 
5 2 2
1 3
3 5
2 2 
4 5
样例输出 
8



以下把学习称为填黑,颓废称为填白。先离散化一下,每段有三种情况∶全黑、全白、有黑有白。
最终方案需要满足没有一个连续黑段包含完整的第二类区间,也没有一个连续白段包含完整的第一类区间。
设fi.gi,hi表示从左到右填到第i段,且结尾是黑、白、有黑有白的合法方案数,那么i这个位置往前的最长黑色、白色连续
段长度很容易求出,转移用前缀和优化一下就行了。复杂度瓶颈是离散化。
也有开两个线段树记录最后一个和末尾不同的位置的做法,但是比较难写,常数也较大,可能被卡常。


接着,我们使用动态规划来计算填黑和填白的方案数。我们用fs[i]表示以第i个时间段结尾的全填黑的方案数,ft[i]表示以第i个时间段结尾的全填白的方案数,g[i]表示以第i个时间段结尾有黑有白的方案数。

对于fs[i],我们可以根据之前的结果得到,如果第i个时间段全填黑,那么前一个时间段只能全填白或者有黑有白,所以有fs[i] = (sg[i-1] - sg[mt[i]-1] + MOD) % MOD + (st[i-1] - st[mt[i]-1] + MOD) % MOD,其中sg[i]和st[i]分别表示前i个时间段填黑和填白的方案数的前缀和,mt[i]表示以第i个时间段结尾的最短黑色时间段的左端点。

对于ft[i],同理我们有ft[i] = (sg[i-1] - sg[ms[i]-1] + MOD) % MOD + (ss[i-1] - ss[ms[i]-1] + MOD) % MOD,其中sg[i]和ss[i]分别表示前i个时间段填黑和填白的方案数的前缀和,ms[i]表示以第i个时间段结尾的最短白色时间段的左端点。

对于g[i],如果我们在第i个时间段结尾填黑,那么前i-1个时间段可以是全填黑、全填白或者有黑有白,所以有g[i] = ((fs[i-1] + ft[i-1]) % MOD + g[i-1]) * (2^(h[i] - h[i-1]) - 2 + MOD) % MOD,其中2^(h[i] - h[i-1]) - 2表示前i个时间段填黑或填白的所有方案数。
这里2^(h[i] - h[i-1]) - 2表示前i个时间段有黑有白的方案数,一共有h[i]-h[i-1]并且每个时间点可以填黑或填白,所以就是2^(h[i] -h[i-1])。-2是要减去全黑和全白的两种情况。

最后答案就是fs[hc] + ft[hc] + g[hc]。


*/

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 400005, mod = 1e9 + 7;
/*
	ls,rs:表示填黑时间段的左端点和右端点
	lt,rt:表示填白时间段的左端点和右端点
	hc, h: h表示存填白\黑的时间段左右端点,hc表示一共有多少个时间段 * 2 ,注要多存整个时间段(0, k] 
	fs, ft, g:分别表示全填黑、全填白和有黑有白的方案数。 
	ss,st,sg:分别是全填黑、全填白和有黑有白的前缀和。
	ms和mt:ms存的是以R(离散化过后)为右端点的最短黑段的L值,mt同理。
*/
int k, n, m, hc;
int ls[N], rs[N], lt[N], rt[N], h[N], ms[N], mt[N];  
int fs[N], ft[N], g[N], ss[N], st[N], sg[N];
int ksm(int a, int b) { // 快速幂 
	int x = 1;
	for (; b > 0; b & 1 ? x = 1ll * x * a % mod : 0, a = 1ll * a * a % mod, b >>= 1);
	return x;
}
inline int m1(int x) { //求余 
	return x >= mod ? x - mod : x;
}
inline int input() {
	int x = 0, F = 1;
	char c = getchar();
	while (c > '9' || c < '0') {
		if (c == '-')F = -1;
		c = getchar();
	}
	while (c <= '9' && c >= '0') {
		x = x * 10 + c - '0';
		c = getchar();
	}
	return x * F;
}
int main() {
	k = input();
	n = input();
	m = input();
	for (int i = 1; i <= n; i++)
		ls[i] = input(), rs[i] = input(), h[++hc] = ls[i] - 1, h[++hc] = rs[i];
	for (int i = 1; i <= m; i++)
		lt[i] = input(), rt[i] = input(), h[++hc] = lt[i] - 1, h[++hc] = rt[i];
	h[++hc] = 0;
	h[++hc] = k;
	sort(h + 1, h + hc + 1);
	hc = unique(h + 1, h + hc + 1) - h - 1; // 排序去重 
	for (int i = 1; i <= n; i++) { // 填黑 
		int L = lower_bound(h + 1, h + hc + 1, ls[i] - 1) - h, R = lower_bound(h + 1, h + hc + 1, rs[i]) - h;
		ms[R] = max(ms[R], L + 1); // L,R是相对大小,以R为右端点,存的是最短的区间
	}
	for (int i = 1; i <= m; i++) { // 填白 
		int L = lower_bound(h + 1, h + hc + 1, lt[i] - 1) - h, R = lower_bound(h + 1, h + hc + 1, rt[i]) - h;
		mt[R] = max(mt[R], L + 1);
	}
	g[1] = sg[1] = 1; // 第一天可填黑可填白
	ms[1] = mt[1] = 1; // ms和mt保存的是第一个时间段为[1, 1]的值
	for (int i = 2; i <= hc; i++) {
		ms[i] = max(ms[i - 1], ms[i]); //黑: 这里找一个以i点为右端点的最大左端点
		mt[i] = max(mt[i - 1], mt[i]);
		fs[i] = m1(m1(sg[i - 1] - sg[mt[i] - 1] + mod) + m1(st[i - 1] - st[mt[i] - 1] + mod));// 第i段以i结尾的全填黑 
		ft[i] = m1(m1(sg[i - 1] - sg[ms[i] - 1] + mod) + m1(ss[i - 1] - ss[ms[i] - 1] + mod));
		g[i] = 1ll * m1(m1(fs[i - 1] + ft[i - 1]) + g[i - 1]) * (ksm(2, h[i] - h[i - 1]) - 2 + mod) % mod;
		ss[i] = m1(ss[i - 1] + fs[i]);
		st[i] = m1(st[i - 1] + ft[i]);
		sg[i] = m1(sg[i - 1] + g[i]);
	}
	printf("%d", m1(m1(fs[hc] + ft[hc]) + g[hc]));
	return 0;
}

2.利用map或unordered_map进行数据离散化 (使用与非区间操作)

常与差分、并查集、DFS等算法结合考察

2.1 邮票 FZU - 2227【DFS】

题目描述

在这里插入图片描述
思路
可以先做映射关系(离散化),然后从最小的数并且这个数出现的次数为1开始dfs,走到哪直接就存到哪。
代码

#include<cstdio>
#include<vector>
#include<map>
#include<cstring>
using namespace std;
const int maxn=1e5+5;
map<int,int>index,data,num;
vector<int>v[maxn];//邻接表,存相对大小的关系 
int cnt,pos;
int dis[maxn];
bool vis[maxn];
void dfs(int x)
{
	if(cnt==pos)	return;
	//int len=v[x].size();
	for(int i=0;i<2;i++) // 题目保证有解,说明一个顶点最多有两个出度
	{
		int y=v[x][i];
		if(!vis[y])
		{
			vis[y]=true;
			dis[pos++]=data[y];
			dfs(y);
		}
		if(cnt==pos)	return;
	}
}
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int ui,vi;
		cnt=0,pos=0;
		index.clear();
		data.clear();
		num.clear();
		memset(vis,false,sizeof(vis));
		for(int i=0;i<2*n;i++)	v[i].clear();
		while(n--)
		{
			scanf("%d%d",&ui,&vi);
			if(!num[ui]) 
			{
				index[ui]=cnt++;
				data[index[ui]]=ui;//建立映射关系 (1,100) (100,1) 
			}
			if(!num[vi])
			{
				index[vi]=cnt++;
				data[index[vi]]=vi;
			}
			v[index[ui]].push_back(index[vi]);//建立相对大小的对应关系 
			v[index[vi]].push_back(index[ui]);
			num[ui]++;
			num[vi]++;
		}
		int st=0;
		for(map<int,int>::iterator it=num.begin();it!=num.end();it++)
		{
			if(it->second==1) //判断是否唯一出现,第一个唯一出现的肯定是字典序最小且起始的位置	
			{
				st=index[it->first];
				break;
			}
		}
		vis[st]=true;
		dis[pos++]=data[st];
		dfs(st);
		for(int i=0;i<cnt;i++)
		{
			printf("%d",dis[i]);
			if(i<cnt-1)	printf(" ");
			else	printf("\n");
		}
	}
}

2.2 More is better HDU - 1856 【并查集】

题目描述
在这里插入图片描述
思路:
在集合合并的时,如果两个集合不同,那么在合并成同一个集合的时候,
将被合并的集合里的个数加到这个集合里面,并统计最大值。
坑点:就是当输入n为0时,答案为1,因为当没有朋友对时,各自在自己的房间,所以说答案为1。
代码:

#include<iostream>
#include<cstdio>
#include<map>
#include<utility>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 1e5 + 5;
map<int, int> mp;
int fa[maxn], num[maxn], ans = 0;
void init(int n){
	for (int i = 1; i <= n; ++i){
		fa[i] = i;
		num[i] = 1;
	}
}
int find(int x){
	return fa[x] == x ? fa[x] : fa[x] = find(fa[x]);
}
void _union(int x, int y){
	x = find(x);
	y = find(y);
	if(x != y){
		num[y] += num[fa[x]];
		ans = max(ans, num[y]);
		fa[x] = y;
	}
}
void solve(){
	int n, x, y;
	while (scanf("%d", &n) != EOF){
		int cnt = 0;
		ans = 0;
		init(maxn); 
		mp.clear();
		if (n == 0){
			puts("1");
			continue;
		}
		while (n--){
			scanf("%d%d", &x, &y);
			if(!mp[x])	mp[x] = ++cnt;
			if(!mp[y])	mp[y] = ++cnt;
			_union(mp[x], mp[y]);
		}
		printf("%d\n", ans);
	}
}
int main(){
	solve();
	return 0;
}

2.3 金发姑娘和 N 头牛 - 1952. AcWing题库

题目描述
在这里插入图片描述
思路:
在这里插入图片描述
代码

#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>

using namespace std;

const int INF = 2e9;

int n, x, y, z;

int main()
{
    map<int, int> b; // 离散化及差分数组
    
    cin >> n >> x >> y >> z;
    for (int i = 0; i < n; i ++ )
    {
        //给三个大区间 + c
        int l, r;
        cin >> l >> r;
        //[-INF,r)
        b[-INF] += x;
        b[l] -= x;
        //[l, r]
        b[l] += y;
        b[r + 1] -= y;
        //b(r, INF]
        b[r + 1] += z;
        b[INF] -= z;
    }
    int res = 0, sum = 0;
    // 枚举差分数组,求前缀和,更新最大值
    
    for(auto item : b)
    {
        sum += item.second;// 前缀和
        res = max(res, sum);
    }
    
    cout << res;
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/62282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP8的表达式-PHP8知识详解

表达式是 PHP 最重要的基石。在 PHP8中&#xff0c;几乎所写的任何东西都是一个表达式。简单但却最精确的定义一个表达式的方式就是"任何有值的东西"。 最基本的表达式形式是常量和变量。当键入"$a 5"&#xff0c;即将值"5"分配给变量 $a。&quo…

C++初阶——拷贝构造和运算符重载(const成员)

目录 1. 拷贝构造函数 1.2 拷贝构造函数特征&#xff1a; 2. 默认拷贝构造函数 2.1 未显式定义&#xff0c;编译器会生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝&#xff0c;这种拷贝叫做浅拷贝&#xff0c;或者值拷贝 3. 运算符重载 3.1…

Flink CEP(三)pattern动态更新

线上运行的CEP中肯定经常遇到规则变更的情况&#xff0c;如果每次变更时都将任务重启、重新发布是非常不优雅的。尤其在营销或者风控这种对实时性要求比较高的场景&#xff0c;如果规则窗口过长&#xff08;一两个星期&#xff09;&#xff0c;状态过大&#xff0c;就会导致重启…

vue-virtual-scroller的使用,展示巨量数据,长列表优化,虚拟列表

一、原理 计算显示区域的高度&#xff08;或宽度&#xff09; 和显示区域的起始位置&#xff08;scrollTop或scrollLeft&#xff09;根据每个元素的尺寸和总数目&#xff0c;计算出整个列表的高度&#xff08;或宽度&#xff09;显示区域的高度&#xff08;或宽度&#xff09…

基于Orangepi 3 lts 的云台相机

利用orangepi 3 lts 和arduino nano 制作了一个云台相机&#xff0c;可用于室内监控。 硬件&#xff1a; orangepi 3 ,arduino nano ,usb相机&#xff0c;180度舵机两个 WeChat_20230806213004 软件&#xff1a; 整体采用mqtt进行消息的中转。 相机采用python 利用opencv…

LeetCode每日一题Day5——21. 合并两个有序链表

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …

第三章 图论 No.2单源最短路之虚拟源点,状压最短路与最短路次短路条数

文章目录 1137. 选择最佳线路1131. 拯救大兵瑞恩1134. 最短路计数383. 观光 dp是特殊的最短路&#xff0c;是无环图&#xff08;拓扑图&#xff09;上的最短路问题 1137. 选择最佳线路 1137. 选择最佳线路 - AcWing题库 // 反向建图就行 #include <iostream> #include…

C++ 类型兼容规则

类型兼容规则是指在需要基类对象的任何地方&#xff0c;都可以使用公有派生类的对象来替代。 通过公有继承&#xff0c;派生类得到了基类中除构造函数和析构函数之外的所有成员。这样&#xff0c;公有派生类实际就具备了基类的所有功能&#xff0c;凡是基类能解决的问题&#x…

vcomp100.dll丢失怎样修复?总结三个修复方法

在使用Windows系统的电脑的过程中&#xff0c;我们有时会遇到一些错误提示&#xff0c;其中之一就是关于vcomp100.dll文件缺失或损坏的问题。我第一次看到这个错误提示时&#xff0c;我并不知道vcomp100.dll是什么文件&#xff0c;也不了解它在电脑中的作用。我猜测它可能是一个…

​币安或面临「美司法部」欺诈指控

作者&#xff1a;维特根斯坦他弟 美国媒体semafor独家报道&#xff0c;知情人士透露&#xff0c;美国司法部正计划对币安提出欺诈指控&#xff0c;但又担心消费者会为此付出的巨大代价。 知情人士表示&#xff0c;联邦检察官担心他们起诉币安&#xff0c;可能会引发该交易所发生…

linux服务器之-nethogs命令

文章目录 NetHogs 工具安装安装依赖包安装epel源安装Nethogs 使用 NetHogs 工具 NetHogs是一个小型的net top工具&#xff0c;不像大多数工具那样拖慢每个协议或者是每个子网的速度而是依照进程进行带宽分组。 安装 安装依赖包 yum install libpcap libpcap-devel epel-rel…

企业架构NOSQL数据库之MongoDB

目录 一、背景描述及其方案设计 (一)业务背景描述 &#xff08;二&#xff09;模拟运维设计方案 二、Mongodb介绍 &#xff08;一&#xff09;nosql介绍 &#xff08;二&#xff09;产品特点 1、存储性 2、 效率性 3、结构 三、安装和配置 &#xff08;一&#xff09…

Statefulset 实战 3

上一部分我们说到如何使用 Statefulset 部署有状态的应用&#xff0c;Statefulset 可以做到部署的 每一个 pod 能够独立的拥有一个持久卷声明和持久卷 之前我们 用 Statefulset 和 ReplicaSet 对比&#xff0c;自然他们是有相似之处和不同之处&#xff0c;不同之处前面的文章已…

【嵌入式环境下linux内核及驱动学习笔记-(18)LCD驱动框架1-LCD控制原理】

目录 1、LCD显示系统介绍1.1 LCD显示基本原理1.1.1 颜色的显示原理&#xff1a;1.1.2 图像的构成 1.2 LCD接口介绍1.2.1 驱动接口 - MCU接口1.2.2 驱动接口 - RGB接口1.2.3 驱动接口 - LVDS接口1.2.4 驱动接口 - MIPI接口1.2.5 RGB / MIPI / LVDS三种接口方式的区别&#xff1a…

【雕爷学编程】MicroPython动手做(30)——物联网之Blynk

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

《MySQL高级篇》十五、其他数据库日志

文章目录 1. MySQL支持的日志1.1 日志类型1.2 日志的弊端 2. 慢查询日志(slow query log)3. 通用查询日志3.1 问题场景3.2 查看当前状态3.3 启动日志3.4 查看日志3.5 停止日志3.6 删除\刷新日志 4. 错误日志(error log)4.1 启动日志4.2 查看日志4.3 删除\刷新日志4.4 MySQL8.0新…

el-table 去掉边框(修改颜色)

原始&#xff1a; 去掉表格的border属性&#xff0c;每一行下面还会有一条线&#xff0c;并且不能再拖拽表头 为了满足在隐藏表格边框的情况下还能拖动表头&#xff0c;修改相关css即可&#xff0c;如下代码 <style lang"less"> .table {//避免单元格之间出现白…

计算机网络(3) --- 网络套接字TCP

计算机网络&#xff08;2&#xff09; --- 网络套接字UDP_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131977544?spm1001.2014.3001.5501 目录 1.TCP 1.服务端接口介绍 1.listen状态 2.accept获取链接 2.客户端接口介绍 2.TCP的服务器…

【TypeScript】TS接口interface类型(三)

【TypeScript】TS接口interface类型&#xff08;三&#xff09; 【TypeScript】TS接口interface类型&#xff08;三&#xff09;一、接口类型二、实践使用2.1 常规类型2.2 设置属性只读 readonly2.3 设置索引签名2.4 设置可选属性2.5 函数类型接口 一、接口类型 TypeScript中的…

QtWebApp同时开启http服务和https服务,接受来自客户端的不同请求并进行相应的处理

零、前言 在 QtWebApp开发https服务器&#xff0c;完成客户端与服务器基于ssl的双向认证&#xff0c;纯代码操作 一文中已经用纯代码的形式完成了客户端和服务端的 https 协议交互。 不过&#xff0c;只是开放了https服务&#xff0c;更多情况下&#xff0c;http服务和https服…