当前位置: 首页 > news >正文

如何建网站教程/可以看国外网站的浏览app

如何建网站教程,可以看国外网站的浏览app,java 网站制作,衡水网站建设供应商找不到链接 题目描述 题解 考虑暴力的做法,首先保留所有相同的数中最靠左的那个,然后从保留的数中选择最靠右的位置,不妨称其为“中点”。容易得出答案的 r′rr′ 必须不左于这个位置 (这里的左仅仅是在左边的意思) …

找不到链接

题目描述

在这里插入图片描述

题解

考虑暴力的做法,首先保留所有相同的数中最靠左的那个,然后从保留的数中选择最靠右的位置,不妨称其为“中点”。容易得出答案的 r′r'r 必须不左于这个位置 (这里的左仅仅是在左边的意思)

然后我们可以从“中点”到 rrr 进行扫描线,维护所有相同的数中最靠右的位置,然后取最小值得到对于每个 r′r'r 最优的 l′l'l

由于题目不要求在线,所以我们可以考虑把询问离线下来统一做扫描线。

首先可以离线然后做向左的扫描线求出每个询问的“中点”。然后由于中点的性质,从中点到询问的 rrr 扫描的过程中不会影响到 lll 前面的值,所以问题就是对于每个询问,求扫描线在其中点到右端点之间的时候,维护的位置中在 lll 右边的最近位置,到扫描线距离的最小值。

形式化地说,设 SxS_xSx 表示扫描到 xxx 处时维护的最靠右位置的集合,mdimd_imdi 表示询问 iii 的“中点”,那么我们需要对每个 iii
min⁡{x−min⁡{y∣y∈Sx,y≥li}+1∣mdi≤x≤ri}\min\{x-\min\{y|y\in S_x,y\ge l_i\}+1|md_i\le x\le r_i\} min{xmin{yySx,yli}+1∣mdixri}我们可以先在扫描线进行到 mdimd_imdi 处时将询问挂到此时对应的 yyy 上,由于维护的集合只会从右边加入并在前面删除,所以合法的 yyy 只会不断右移,并且只会在当前的 yyy 从集合中删除的时候移动。此时需要将挂在 yyy 上的询问整体迁移挂到另一个 yyy 上。

由于我们需要求最小值,所以对于某个合法的 yyy,只有询问刚挂上的时候的答案最优。此时我们需要对挂在此处的询问整体打上一个标记,表示对这些询问产生的贡献。

另外在打上标记之前,这些询问中可能有已经超出询问范围的(即此时扫描线已经超过了对应 rir_iri),我们需要让它们带上标记走人。

最适合实现上述功能且常数最小的数据结构就是手写可并堆了,我们只需要实现懒标记功能和堆合并即可。

我们可以对每个集合内元素维护一个可并堆表示挂在此处的询问,rir_iri 小的放上面,这样在转移的时候就可以把超出范围的询问一个一个拿出来。

这样算下来总复杂度是 O(nlog⁡n)O(n\log n)O(nlogn) 的,有一些卡常注意事项:
用 set 太慢了,建议换成线段树;
离线挂询问之前先记录一下 vector 需要开多大,然后进行 reserve,这样优化效果比优化可并堆要显著。
可并堆的话虽然在复杂度瓶颈上,但是并不需要多么卡常,所以你写什么都行,左偏树、随机堆,甚至斜堆都能过。

代码

#include<bits/stdc++.h>//JZM yyds!!
#define ll long long
#define lll __int128
#define uns unsigned
#define fi first
#define se second
#define IF (it->fi)
#define IS (it->se)
#define END putchar('\n')
#define lowbit(x) ((x)&-(x))
#define inline jzmyyds
using namespace std;
const int MAXN=2e6+5;
const ll INF=1e17;
ll read(){ll x=0;bool f=1;char s=getchar();while((s<'0'||s>'9')&&s>0){if(s=='-')f^=1;s=getchar();}while(s>='0'&&s<='9')x=(x<<1)+(x<<3)+(s^48),s=getchar();return f?x:-x;
}
int ptf[50],lpt;
void print(ll x,char c='\n'){if(x<0)putchar('-'),x=-x;ptf[lpt=1]=x%10;while(x>9)x/=10,ptf[++lpt]=x%10;while(lpt>0)putchar(ptf[lpt--]^48);if(c>0)putchar(c);
}
using pii=pair<int,int>;
int n,m,k,a[MAXN],L[MAXN],R[MAXN],md[MAXN];
const int MX=1e8;
//随机堆
mt19937 Rand(1145141);
struct mgh{int s[2],a,lz;mgh(){}mgh(int A){a=A,lz=MX,s[0]=s[1]=0;}
}t[MAXN];
void cover(int x,int d){if(!x)return;t[x].a=min(t[x].a,d),t[x].lz=min(t[x].lz,d);
}
void pushd(int x){if(x&&t[x].lz<MX)cover(t[x].s[0],t[x].lz),cover(t[x].s[1],t[x].lz),t[x].lz=MX;
}
bool cmp(int x,int y){return R[x]>R[y];}
int mergh(int x,int y){if(!x||!y)return x^y;if(cmp(x,y))swap(x,y);pushd(x);bool o=Rand()&1;if(!t[x].s[o^1])o^=1;return t[x].s[o]=mergh(t[x].s[o],y),x;
}
int la[MAXN],as[MAXN],rt[MAXN],sk[MAXN],le,sv[MAXN];
vector<pii>ad[MAXN];
//zkw线段树
struct zkw{bool f[4100000];int p;//精细计算使用到的位置,空间其实只用开两倍多点void init(int n){for(p=1;p<n+2;p<<=1);}void cg(int x){for(f[p+x]^=1,x=(p+x)>>1;x;x>>=1)f[x]=f[x<<1]|f[x<<1|1];}int schl(int x){for(x=p+x+1;x>1;x>>=1)if((x&1)&&f[x^1]){x^=1;break;}for(;x<p;x<<=1,x^=f[x^1]);return x-p;}int schr(int x){for(x=p+x-1;x>1;x>>=1)if((~x&1)&&f[x^1]){x^=1;break;}for(;x<p;x<<=1,x^=f[x]^1);return x-p;}
}T;
int main()
{freopen("frog.in","r",stdin);freopen("frog.out","w",stdout);n=read();for(int i=1;i<=n;i++)a[i]=read(),k=max(k,a[i]);m=read(),T.init(n);for(int i=1;i<=m;i++)L[i]=read(),R[i]=read(),sv[L[i]]++;for(int i=1;i<=n;i++)ad[i].reserve(sv[i]);for(int i=1;i<=m;i++)ad[L[i]].emplace_back(R[i],i);for(int i=n;i>0;i--){int c=a[i];if(la[c])T.cg(la[c]);la[c]=i,T.cg(i),sv[i]=0;for(auto&x:ad[i])sv[md[x.se]=T.schl(x.fi)]++;ad[i].clear();}for(int i=1;i<=k;i++)if(la[i])T.cg(la[i]),la[i]=0;for(int i=1;i<=n;i++)ad[i].reserve(sv[i]);for(int i=1;i<=m;i++)t[i]=mgh(R[i]-L[i]+1),ad[md[i]].emplace_back(L[i],i);for(int i=1;i<=n;i++){int c=a[i],y;T.cg(i);if(la[c]){int&x=rt[la[c]];while(x&&R[x]<i)as[x]=t[x].a,pushd(x),x=mergh(t[x].s[0],t[x].s[1]);T.cg(la[c]);if(x)y=T.schr(la[c]),cover(x,i-y+1),rt[y]=mergh(rt[y],x),x=0;}la[c]=i;for(auto&x:ad[i])y=T.schr(x.fi),cover(x.se,i-y+1),rt[y]=mergh(rt[y],x.se);}for(int i=1;i<=n;i++)if(rt[i])sk[++le]=rt[i];for(int i=1;i<=le;i++){int x=sk[i];as[x]=t[x].a,pushd(x);if(t[x].s[0])sk[++le]=t[x].s[0];if(t[x].s[1])sk[++le]=t[x].s[1];}for(int i=1;i<=m;i++)print(as[i]);return 0;
}
http://www.lbrq.cn/news/1603423.html

相关文章:

  • 各大网站投稿/员工培训课程
  • 网站为什么没有排名了/seo网站内部优化
  • 道真县城乡建设局网站/苏州网站制作开发公司
  • 外国做袜子的网站/线上推广具体应该怎么做
  • 做自媒体查找素材的网站/网站seo优化课程
  • 国务院关于网站建设/百度app安装
  • 小白测评做网站/百度 营销中心
  • 如何在电脑上建立网站/谷歌下载
  • 中国日报网英文官方网站建设/中国制造网网站类型
  • 南通网站建设系统方案/西安网络推广外包公司
  • 手机怎样做网站/网站关键词优化建议
  • 网络专业的网站建设/福州seo网络推广
  • 灯饰网站建设/seowhy教研室
  • 猪八戒wordpress/常熟seo关键词优化公司
  • 网站设计导航栏怎么做/怎么自己建立网站
  • 域名手机网站源码/百度游戏中心app
  • 做网站经验/seo教程技术优化搜索引擎
  • 股票网站排名哪个好/岳阳seo
  • 武汉专业建站注意事项/运营培训
  • 新乡专业网站建设公司/百度网页pc版登录
  • 制作企业网站的步骤/seo去哪学
  • 重庆建设厅的网站首页/最新地址
  • 自己做网站用花钱吗/网站推广在线
  • 加强统计局网站的建设和管理/aso优化方案
  • 一个网站的二级目录在另一台服务器上_怎么做/app推广赚佣金
  • 优秀的摄影作品网站/互联网营销师培训课程免费
  • 经营性质的网站/wordpress自助建站
  • 网站建设计入到什么科目/中国新冠一共死去的人数
  • 企业微信网站建设/网站开发框架
  • 如何用dw做网站底页/品牌互动营销案例
  • 深度学习TR3周:Pytorch复现Transformer
  • WPF 按钮背景色渐变
  • 《前端无障碍设计的深层逻辑与实践路径》
  • 关于Web前端安全防御之内容安全策略(CSP)
  • 电子电气架构 --- 汽车网络安全概述
  • ls hgfs提示ls: cannot access ‘hgfs‘: Permission denied