7.20 模拟赛总结 [邻项交换] + [决策单调性]

只放题解喽

题解

    • T1
    • T2
    • T3
    • T4

T1

在这里插入图片描述
等价于维护差分数组,数据范围较小,map 套 vector 维护即可

更大的数据范围可以 hash 做

T2

在这里插入图片描述
神奇贪心

本题关键在于定序,考虑顺序确定后答案怎么求

f i f_i fi 表示 第 i i i 件衣服烘干完的时间,显然有转移: f i = m a x ( f i − 1 , ∑ k = 1 i a k ) + b i f_i=max(f_{i-1},\sum_{k=1}^{i}a_k)+b_i fi=max(fi1,k=1iak)+bi ,认为 f 0 = 0 f_0=0 f0=0

对于顺序,考虑邻项交换,贴一篇大佬的 blog

对于邻项 x , y x,y x,y,设前面烘干时间为 f f f ∑ a k \sum a_k ak S S S ,显然我们希望让考虑完 x , y x,y x,y 后的 f f f 尽可能小

  1. x x x y y y f x = m a x ( f , S + a x ) + b x f_x=max(f,S+a_x)+b_x fx=max(f,S+ax)+bx f y = m a x ( f + b x + b y , S + a x + b x + b y , S + a x + a y + b y ) f_y=max(f+b_x+b_y,S+a_x+b_x+b_y,S+a_x+a_y+b_y) fy=max(f+bx+by,S+ax+bx+by,S+ax+ay+by)
  2. y y y x x x,将 ( x , y ) (x,y) (x,y) 轮换后可得到 f x ′ = m a x ( f + b y + b x , S + a y + b y + b x , S + a y + a x + b x ) f'_x=max(f+b_y+b_x,S+a_y+b_y+b_x,S+a_y+a_x+b_x) fx=max(f+by+bx,S+ay+by+bx,S+ay+ax+bx)

何时可以不交换排好顺序的 x , y x,y x,y 呢?

显然应该 f y ≤ f x ′ ( 1 ) f_y\leq f'_x(1) fyfx1 ,开始化式子,由于 f + b x + b y f+b_x+b_y f+bx+by 相同,我们可以将其约掉

即: m a x ( S + a x + b x + b y , S + a x + a y + b y ) ≤ m a x ( S + a y + b y + b x , S + a y + a x + b x ) ( 2 ) max(S+a_x+b_x+b_y,S+a_x+a_y+b_y)\leq max(S+a_y+b_y+b_x,S+a_y+a_x+b_x) (2) max(S+ax+bx+by,S+ax+ay+by)max(S+ay+by+bx,S+ay+ax+bx)2

注意,这里约掉前后的两个式子是不等价的, m a x ( a , c ) ≤ m a x ( b , c ) max(a,c)\leq max(b,c) max(a,c)max(b,c) 不等价于 a ≤ b a\leq b ab,但在本题这么做不会出错,简单讨论可以发现是对的 (其实告诉我们这里只需要 化成必须交换的充分条件 就行)

接下来继续化:

a x + b y + m a x ( b x , a y ) ≤ a y + b x + m a x ( b y , a x ) a_x+b_y+max(b_x,a_y)\leq a_y+b_x+max(b_y,a_x) ax+by+max(bx,ay)ay+bx+max(by,ax)

m i n ( a x , b y ) ≤ m i n ( a y , b x ) min(a_x,b_y)\leq min(a_y,b_x) min(ax,by)min(ay,bx)

那么我们 c m p cmp cmp 函数里只需要这么写 m i n ( a x , b y ) < m i n ( a y , b x ) min(a_x,b_y)<min(a_y,b_x) min(ax,by)<min(ay,bx) 就做完了 —— 吗?

并不正确!关于邻项交换还有很多限制

对于我们定义的一种比较规则 X < Y X<Y X<Y,需要满足 严格弱序

  1. 传递性,即 X < Y , Y < Z X<Y,Y<Z X<Y,Y<Z,就有 X < Z X<Z X<Z
    否则,对于最终排好的序列中的 X , Y , Z X,Y,Z X,Y,Z,虽然对于邻项满足 X < Y , Y < Z X<Y,Y<Z X<Y,Y<Z,但是我们可以先交换 X , Y X,Y X,Y 使答案损失一部分,但接下来可能出现 X > Z X>Z X>Z,然后交换二者使得答案比以前更优

  2. 不可比性,若 X ≮ Y , Y ≮ X , Y ≮ Z , Z ≮ Y X≮Y,Y≮X,Y≮Z,Z≮Y XY,YX,YZ,ZY,那么 X ≮ Z , Z ≮ X X≮Z,Z≮X XZ,ZX
    可以简单理解为 X = Y , Y = Z X=Y,Y=Z X=Y,Y=Z,那么 X = Z X=Z X=Z
    否则,同上,交换 X , Y X,Y X,Y 后可能出现新的逆序,使得答案更优

本题来说,我们定义的比较规则 X < Y → m i n ( a x , b y ) < m i n ( a y , b x ) X<Y \to min(a_x,b_y)<min(a_y,b_x) X<Ymin(ax,by)<min(ay,bx),满足 1,但不满足 2

对于这个的验证方法参考大佬的 b l o g blog blog,大力发挥 OIer 的优势

那么接下来我们需要定义一种能够同时满足上述两个条件的比较方式

m i n ( a x , b y ) = m i n ( a y , b x ) min(a_x,b_y)=min(a_y,b_x) min(ax,by)=min(ay,bx) 时,我们感性理解可以把 a , b a,b a,b 小的放前面(这个其实比较随意,因为第一步已经保证了答案最优性,接下来只需要满足严格弱序就行),于是得到了:

{ m i n ( a x , b y ) < m i n ( a y , b x ) ( i f m i n ( a x , b y ) ≠ m i n ( a y , b x ) ) a x < a y ( o t h e r w i s e ) } \begin{Bmatrix} min(a_x,b_y)<min(a_y,b_x)\ \ \ (if\ \ min(a_x,b_y)\ne min(a_y,b_x))\\a_x<a_y \ \ \ \ \ (otherwise) \end{Bmatrix} {min(ax,by)<min(ay,bx)   (if  min(ax,by)=min(ay,bx))ax<ay     (otherwise)}

这个比较方式既满足 严格弱序,又能够使得邻项交换后不会使得答案变优,于是我们就得到了正确答案

总结几点:

推式子时找充分条件就行了,不一定得充要

贪心时只考虑相邻两项,只要是满足严格弱序,且邻项交换不会使答案变优,那么就是最优方案

贴一个 checker

int a[N] , b[N] , w[N] ;
bool cmp ( int x , int y )
{if( min(a[x],b[y])!=min(a[y],b[x]) ) return min(a[x],b[y]) < min(a[y],b[x]) ;return a[x]<a[y] ;
}
bool check()
{int Max = 20 ;for( a[0] = 1 ; a[0] <= Max ; a[0] ++ ) {for( b[0] = 1 ; b[0] <= Max ; b[0] ++ ) {if( cmp(0,0) ) {printf("No self , %d %d\n" , a[0] , b[0] ) ;return 0 ;} // 验证自反性 for( a[1] = 1 ; a[1] <= Max ; a[1] ++ ) {for( b[1] = 1 ; b[1] <= Max ; b[1] ++ ) {if( cmp(0,1) && max(1/b[0],a[0]/b[1])>max(1/b[1],a[1]/b[0]) ) {printf("Not the best\n") ;return 0 ;} // 验证最优性 for( a[2] = 1 ; a[2] <= Max ; a[2] ++ ) {for( b[2] = 1 ; b[2] <= Max ; b[2] ++ ) {if( cmp(0,1) && cmp(1,2) && !cmp(0,2) ) {printf("No Trans\n") ;return 0 ;} // 验证传递性 if( !cmp(0,1)&&!cmp(1,0)&&!cmp(1,2)&&!cmp(2,1)&&(cmp(0,2)||cmp(2,0)) ) {printf("No comparability , (%d,%d) (%d,%d) (%d,%d)\n" , a[0] , b[0] , a[1] , b[1] , a[2] , b[2] ) ;return 0 ;} // 验证不可比性 }}}	}	}}return 1 ;
}

T3

大力发扬人类智慧!

在这里插入图片描述
先说暴力怎么做,枚举三角形,枚举点,判 点是否在三角形里,通过 面积法 来实现

已知两种 O ( n 4 w ) O(\frac{n^4}{w}) O(wn4) 做法:

  1. 求出每条直线上方 / 下方点集,可以 n 3 n^3 n3 预处理,接下来枚举三角形, b i t s e t bitset bitset 上上下下 与一下即可

  2. 注意到任选四个点都可以得到一组关于三角形的方程,也就是说需要花费 O ( n ) O(n) O(n) 计算权值的三角形不多,那么对于当前 i , j , k i,j,k i,j,k 三角形查找是否有 ( i , j , p ) , ( j , k , p ) , ( i , k , p ) (i,j,p),(j,k,p),(i,k,p) (i,j,p),(j,k,p),(i,k,p) 权值均已求过的 p p p,若没有则 O ( n ) O(n) O(n) 算,否则直接加加减减拼凑出来(及其恶心分讨)

下面说正解:

确定一个三角形就不得不枚举三个点了,尝试能不能枚举更少的点,来确定一些更基本的图形

在这里插入图片描述
对于每个点往 x x x 轴上打投影,发现只求梯形就行了!

S Δ A B C = S A D F C − S A B E D − S B E F C S_{\Delta ABC}=S_{ADFC}-S_{ABED}-S_{BEFC} SΔABC=SADFCSABEDSBEFC

这样枚举两个点确定梯形,然后在 O ( n ) O(n) O(n) 求权值即可

有些小细节

T4

在这里插入图片描述
好题,难题

本题的第一个难点在于读懂题

注意到 “可以证明答案一定是一个整数” ,我们开始手玩

发现每次绳子扫过的面积 必定是以上一个关键点为左下角,下一个关键点为右上角的矩形

考虑两个限制:

选点的限制实际上是个二维偏序上的 L I S LIS LIS,排序+树状数组可以做掉

对于面积,写一下转移式:

d p i = m i n ( d p j + ( x i − x j ) ( y i − y j ) ) , l i s i = l i s j + 1 且  x j ≤ x i , y j ≤ y i dp_i=min(dp_j+(x_i-x_j)(y_i-y_j)),lis_i=lis_j+1\ 且\ x_j\leq x_i,y_j\leq y_i dpi=min(dpj+(xixj)(yiyj))lisi=lisj+1  xjxi,yjyi

拆开式子感觉和斜优很像,但很遗憾这个关于 j j j双变量 式子不会做,而且也很难直接维护 Max 什么的

考虑限制分开做,先做 L I S LIS LIS ;然后按 L I S LIS LIS 分层,只考虑相邻层间的转移

容易发现:每层中 随 x x x 增大, y y y 单调不升

那么对于第 i i i 层的点 j j j i − 1 i-1 i1 层中合法的决策 p p p 是一段连续的区间…

然后…优化不动了,但我们发现这样写完交上去获得了 95pts 的好成绩!(逆天)

接下来,找找性质吧,然后就神奇的发现了这个有决策单调性

考虑四边形不等式,设 W ( i , j ) W(i,j) W(i,j) 表示下一层的 i i i 与本层的 j j j 构成的矩形面积
在这里插入图片描述
对于 a < b , i < j a< b,i< j a<b,i<j,有 W ( i , a ) + W ( j , b ) ≥ W ( i , b ) + W ( j , a ) W(i,a)+W(j,b)\geq W(i,b)+W(j,a) W(i,a)+W(j,b)W(i,b)+W(j,a) ( 1 ) (1) (1)

假设对于 i i i 来说, a a a b b b 优,即 f a + W ( i , a ) ≤ f b + W ( i , b ) f_a+W(i,a)\leq f_b+W(i,b) fa+W(i,a)fb+W(i,b) ( 2 ) (2) (2)

( 1 ) + ( 2 ) (1)+(2) (1)+(2),可得 f a + W ( j , a ) ≤ f b + W ( j , b ) f_a+W(j,a)\leq f_b+W(j,b) fa+W(j,a)fb+W(j,b),即 对于 j j j 来说, a a a b b b

所以具有决策单调性

但是,本题与之前朴素的分治优化/二分队列优化的题目不太一样,因为决策有上下界限制!!

必须要满足 x j ≤ x i , y j ≤ y i x_j\leq x_i,y_j\leq y_i xjxi,yjyi,那么随着 i i i 的枚举必然会删除、插入一些决策,与之前的只往后插入新决策不同

那么一个新的技巧:首先将 上一层 的所有决策建线段树,把 i i i 这个“询问”的合法决策范围拆成 l o g log log 个区间,放到上一层的线段树中,全部放完后,遍历线段树所有节点,对每个节点进行一次分治

这么做的好处是显然的,在一个在线段树节点中不用担心决策上下界变化,可以直接分治优化

分析复杂度:

考虑相邻两层,所有的询问一共会被放进 c n t × l o g cnt\times log cnt×log 个区间( c n t cnt cnt 表示每层的节点数),枚举询问的复杂度没问题

遍历线段树节点时,每个节点进行分治的复杂度是 l e n × l o g len\times log len×log,那么对于线段树一层的总复杂度是 c n t × l o g cnt\times log cnt×log,共 l o g log log 层,所以总复杂度 c n t × l o g 2 cnt\times log^2 cnt×log2,最后所有层的总复杂度就是 n l o g 2 nlog^2 nlog2

#include<bits/stdc++.h>
using namespace std ;typedef long long LL ;
const int N = 2e5+100 , M = 1e6+10 ; int n , m ;
struct nn
{int x , y ;
}a[N] ;
bool cmp( nn a , nn b )
{return a.x < b.x || (a.x==b.x&&a.y<b.y) ;
}
int f[N] ;
struct BIT
{int t[M] ;inline int lowbit( int x ) { return x&-x ; }void add( int p , int x ) {for( ; p <= m ; p += lowbit(p) ) t[p] = max( t[p] , x ) ;}int ask( int p ) {int res = 0 ;for( ; p ; p -= lowbit(p) ) res = max( res , t[p] ) ;return res ;}
} T ;
vector<int> ve[N] ;
// 达到 n^2 复杂度后再往下很难优化
// 观察 dp 式子十分朴素,考虑常用优化
// 发现是一个带上下界的决策单调性 
// 决策上下界都会变化时:线段树 把询问分成log个区间,每个区间内可以正常进行分治 
LL dp[N] ;
struct Segtree
{int l , r ;vector<int> q ;
}t[4*N] ;
void build( int p , int l , int r )
{t[p].l = l , t[p].r = r ;vector<int> tmp ;swap( tmp , t[p].q ) ;if( l == r ) {return ;}int mid = ( l + r ) >> 1 ;build( p<<1 , l , mid ) ; build( p<<1|1 , mid+1 , r ) ;
}
void push( int p , int l , int r , int x )
{if( l <= t[p].l && t[p].r <= r ) {t[p].q.push_back( x ) ;return ;}int mid = ( t[p].l + t[p].r ) >> 1 ;if( l <= mid ) push( p<<1 , l , r , x ) ;if( r > mid ) push( p<<1|1 , l , r , x ) ;
}
vector<int> q , J ;
inline LL Val( int x , int y ) // y->x
{return dp[y]+1LL*(a[x].x-a[y].x)*(a[x].y-a[y].y) ;
}
void solve( int l , int r , int ql , int qr )
{if( ql > qr ) return ;int mid = (ql+qr) >> 1 , j ;LL V = 1e18 ;for(int i = l ; i <= r ; i ++ ) {if( V > Val(q[mid],J[i]) ) {V = Val(q[mid],J[i]) ;j = i ;}}dp[q[mid]] = min( dp[q[mid]] , V ) ;solve( j , r , ql , mid-1 ) ;solve( l , j , mid+1 , qr ) ;
}
void work( int p )
{if( t[p].q.size() > 0 ) {swap( q , t[p].q ) ;solve( t[p].l , t[p].r , 0 , q.size()-1 ) ;}if( t[p].l == t[p].r ) {return ;}work( p<<1 ) ; work( p<<1|1 ) ;
}int main()
{scanf("%d%d" , &n , &m ) ;for(int i = 1 ; i <= n ; i ++ ) {scanf("%d%d" , &a[i].x , &a[i].y ) ;}a[n+1].x = m , a[n+1].y = m ;sort( a+1 , a+n+1 , cmp ) ;int Max = 0 ;ve[0].push_back( 0 ) ;for(int i = 1 ; i <= n ; i ++ ) {f[i] = T.ask( a[i].y ) + 1 ;T.add( a[i].y , f[i] ) ;ve[f[i]].push_back( i ) ;Max = max( Max , f[i] ) ;}Max ++ ;ve[Max].push_back( n+1 ) ;memset( dp , 0x3f , sizeof dp ) ;dp[0] = 0 ;for(int i = 1 ; i <= Max ; i ++ ) {build( 1 , 0 , ve[i-1].size()-1 ) ;int p = 0 , q = 0 ;for(int j : ve[i] ) {while( p < ve[i-1].size() && a[ve[i-1][p]].y > a[j].y ) p ++ ;while( q+1 < ve[i-1].size() && a[ve[i-1][q+1]].x <= a[j].x ) q ++ ;if( p <= q ) {push( 1 , p , q , j ) ;}}swap( J , ve[i-1] ) ;work( 1 ) ;swap( J , ve[i-1] ) ;}printf("%lld\n" , dp[n+1] ) ;return 0 ;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运放构成电压跟随器,反馈电阻作用;运放电流采集电路,单电源供电,TINA仿真

电压跟随器 使用运放构成电压跟随器可以减小负载对信号源的影响&#xff0c;还可以提高信号带负载的能力&#xff0c;这是因为运放的结构特性&#xff0c;输入电阻大&#xff0c;输出电阻小。 是否决定使用该电压跟随器&#xff0c;就要看信号源&#xff0c;以及负载的阻抗大小…

【视觉SLAM】 十四讲ch5习题

1.*寻找一个相机&#xff08;你手机或笔记本的摄像头即可&#xff09;&#xff0c;标定它的内参。你可能会用到标定板&#xff0c;或者自己打印一张标定用的棋盘格。 参考我之前写过的这篇博客&#xff1a;【OpenCV】 相机标定 calibrateCamera Code来源是《学习OpenCV3》18.…

kaggle竞赛宝典 | 时序表示学习的综述!

本文来源公众号“kaggle竞赛宝典”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;时序表示学习的综述! 1 介绍 本文综述了时间序列数据中的通用表示学习方法&#xff0c;提出了一种新颖的分类方法&#xff0c;并讨论了其对提高…

【区块链+绿色低碳】巴中市生态价值核算创新应用 | FISCO BCOS应用案例

生态产品总值&#xff08;GEP&#xff09;&#xff0c;指一定区域生态系统为人类福祉和经济社会可持续发展提供的产品与服务价值总和&#xff0c;包 括供给产品价值、调节服务价值和文化服务价值。当前&#xff0c;推动生态产品价值有效转化存在“难度量、难抵押、难交易、 难变…

【手撕数据结构】拿捏单链表

目录 单链表介绍链表的初始化打印链表增加节点尾插头插再给定位置之后插入在给定位置之前插入 删除节点尾删头删删除给定位置的节点删除给定位置之后的节点 查找节点 单链表介绍 单链表也叫做无头单向非循环链表&#xff0c;链表也是一种线性结构。他在逻辑结构上一定连续&…

(Qt) 文件读写基础

文章目录 &#x1f5c2;️前言&#x1f4c4;ref&#x1f4c4;访问标记&#x1f5c3;️enum 标记 &#x1f5c2;️Code&#x1f4c4;demo&#x1f4c4;分点讲解&#x1f5c3;️继承体系&#x1f5c3;️打开/关闭&#x1f5c3;️写&#x1f5c3;️读 &#x1f5c2;️END&#x1f…

Java并发的笔记

打算记录自己的学习情况&#xff0c;尽量不摆烂&#xff0c;另外一件事要有始有终&#xff0c;要弄完 如果多个线程处理同一个变量&#xff0c;读跟写都保证不了 2024.7.22》》》》》》》》》》》》 2.1.1volatile的实现原理 volatile不会引起线程上下文的切换和调度 一致性更…

pycharm+pyqt6配置

1、pip install pyqt6 pyqt6-toools 2、pycharm配置 配置&#xff1a;designer Program&#xff1a;&#xff1a;D:\Python39\Lib\site-packages\qt6_applications\Qt\bin\designer.exe Working directory: $ProjectFileDir$ 配置&#xff1a;pyuic6.exe Program&#xff1a…

调度子系统在特定时间执行

时序逻辑调度器设计模式允许您安排Simulink子系统在指定时间执行。以下模型说明了这种设计模式。 时序逻辑调度器图表包含以下逻辑&#xff1a; 时序逻辑调度器的关键行为 时序逻辑调度器图表包含两个状态&#xff0c;它们以不同的速率调度函数调用子系统A1、A2和A3的执行&…

DVWA靶场超(详细教程)--跨站攻击(XSS+CSRF)

一、XSS 反射型xss 打开dvwa的Reflected Cross Site Scripting (XSS) &#xff08;1&#xff09;low等级 查看页面源码&#xff08;ctrlu&#xff09;该界面有提交按钮和输入框 在输入框随便输入点字符&#xff0c;点击提交 可以看见输入的helloword嵌入到界面中。 View sou…

PS启动提示Adobe Creative Cloud丢失或损坏。您可以尝试修复来解决这个问题,如何解决

一般为找到这个路径下C:\Program Files (x86)\Common Files\Adobe\Adobe Desktop Common\ADS的Adobe Desktop Service.exe文件。如果不在C盘也可以直接搜索其他盘找到此文件。 直接删除此文件即可解决&#xff0c;如果删除不了可以进任务管理器先结束进程再删除。鼠标右键结束任…

DolphinScheduler安装教程

DolphinScheduler安装教程 前期准备工作 jdk 1.8mysql 5zookeeper 3.4.6hadoop 2.6psmisc yum -y install psmisc 解压安装包 # 将安装包apache-dolphinscheduler-2.0.8-bin.tar.gz放置/opt/download目录下 # 解压缩 tar -zxvf apache-dolphinscheduler-2.0.8-bin.tar.gz -C …

看准JS逆向案例:webpack逆向解析

&#x1f50d; 逆向思路与步骤 抓包分析与参数定位 首先&#xff0c;我们通过抓包工具对看准网的请求进行分析。 发现请求中包含加密的参数b和kiv。 为了分析这些加密参数&#xff0c;我们需要进一步定位JS加密代码的位置。 扣取JS加密代码 定位到JS代码中的加密实现后&a…

PGSQL学习-基础表结构

1 访问数据库 创建好数据库后&#xff0c;你可以有三种方式访问数据库 运行PostgreSQL的交互式终端程序&#xff0c;它被称为psql&#xff0c; 它允许你交互地输入、编辑和执行SQL命令。 使用一种已有的图形化前端工具&#xff0c;比如pgAdmin或者带ODBC或JDBC支持的办公套件…

红人点集登录逆向+接口逆向:SHA256算法和Webpack反爬

&#x1f50d; 引言 红人点集采取了一系列加密和限制措施&#xff0c;主要是对于参数加密和登录token加密。今天利用Python与JavaScript逆向工程技术&#xff0c;实现逆向登录然后请求接口获取数据。 &#x1f50d; 思路与步骤详解 &#x1f527; 解密登录接口参数&#xf…

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法 一、环境介绍1.1 本次环境规划1.2 kubernetes简介1.3 kubernetes特点二、本次实践介绍2.1 本次实践介绍2.2 报错场景三、查看报错日志3.1 查看pod描述信息3.2 查看pod日志四、报错分析五、故障处理…

机器学习·概率论基础

概率论 概率基础 这部分太简单&#xff0c;直接略过 条件概率 独立性 独立事件A和B的交集如下 非独立事件 非独立事件A和B的交集如下 贝叶斯定理 先验 事件 后验 在概率论和统计学中&#xff0c;先验概率和后验概率是贝叶斯统计的核心概念 简单来说后验概率就是结合了先验概…

如何将mp4格式的视频压缩更小 mp4格式视频怎么压缩最小 工具软件分享

在数字化时代&#xff0c;视频内容成为信息传播的重要载体。然而&#xff0c;高清晰度的视频往往意味着较大的文件体积&#xff0c;这给存储和分享带来了一定的困扰。MP4格式作为目前最流行的视频格式之一&#xff0c;其压缩方法尤为重要。下面&#xff0c;我将为大家详细介绍如…

浏览器渲染揭秘:从加载到显示的全过程;浏览器工作原理与详细流程

目录 浏览器工作原理与流程 一、渲染开始时间点 二、渲染主线程的渲染流程 2.1、渲染流程总览 2.2、渲染具体步骤 ①解析html-Parse HTML ②样式计算-Recalculate Style ③布局-Layout ④分层-Layer 相关拓展 ⑤绘制-Paint ⑥分块-Tiling ⑦光栅化-Raster ⑧画-D…

Python爬虫 instagram API获取instagram帖子数据信息

这个instagram接口可以通过url链接直接获取相关帖子信息。如有需求&#xff0c;可点击文末链接联系我们。 详细采集页面 https://www.instagram.com/p/CqIbCzYMi5C/ 请求参数 返回示例 { "__typename": "GraphSidecar", "accessibility_caption&qu…