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

网站页面宽度企业培训课程设置

网站页面宽度,企业培训课程设置,事业单位网站建设的账务处理,外省住房和城乡建设厅网站题目描述 给定一个长为 nnn 的序列 a1,…,ana_1,\ldots,a_na1​,…,an​,其中对于任意的 iii 满足 1≤ai≤n1 \leq a_i \leq n1≤ai​≤n。 定义一个二元组函数如下: f((l,r))(min⁡{al,…,ar},max⁡{al,…,ar})(l≤r)f((l,r))(\min\{a_l,\ldots,a_r\}…

题目描述

给定一个长为 nnn 的序列 a1,…,ana_1,\ldots,a_na1,,an,其中对于任意的 iii 满足 1≤ai≤n1 \leq a_i \leq n1ain

定义一个二元组函数如下:
f((l,r))=(min⁡{al,…,ar},max⁡{al,…,ar})(l≤r)f((l,r))=(\min\{a_l,\ldots,a_r\},\max\{a_l,\ldots,a_r\})(l \leq r)f((l,r))=(min{al,,ar},max{al,,ar})(lr)

你需要回答 qqq 次询问,每次给定 (li,ri)(l_i,r_i)(li,ri),问其最少经过多少次 fff 的调用(即 (l,r)→f((l,r))(l,r) \rightarrow f((l,r))(l,r)f((l,r)))使得 (li,ri)(l_i,r_i)(li,ri) 变成 (1,n)(1,n)(1,n),若无解请输出 -1

题解

智慧的性质题
首先注意到f((l,r))=⋃i=lr−1f((i,i+1))f((l,r))=\bigcup_{i=l}^{r-1}f((i,i+1))f((l,r))=i=lr1f((i,i+1))
发现可以推广到fk((l,r))=⋃i=lr−1fk((i,i+1))f^k((l,r))=\bigcup_{i=l}^{r-1}f^k((i,i+1))fk((l,r))=i=lr1fk((i,i+1)),可以用归纳法证明
接下来的做法就容易可以想出了
Fi,j=f2i((j,j+1))F_{i,j}=f^{2^i}((j,j+1))Fi,j=f2i((j,j+1)),然后倍增解决,合并区间可以用线段树,长度为111的线段需要特别处理

code\text{code}code

#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
void read(int &res)
{res=0;char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while('0'<=ch&&ch<='9') res=(res<<1)+(res<<3)+(ch^48),ch=getchar();
}
const int N=1e5+100,B=40;
int n,q,a[N+10];
struct seg
{int l,r;
}f[B+10][N+10];
int g[B+10][N+10];
seg merge(seg a,seg b){return (seg){min(a.l,b.l),max(a.r,b.r)};}
struct SEG
{seg t[N<<2|1];#define ls (p<<1)#define rs (p<<1|1)#define mid ((l+r)>>1)void build(seg *f,int p=1,int l=1,int r=n-1){if(l==r){t[p]=f[l];return;}build(f,ls,l,mid),build(f,rs,mid+1,r);t[p]=merge(t[ls],t[rs]);}seg query(int L,int R,int p=1,int l=1,int r=n-1){if(L<=l&&r<=R) return t[p];if(R<=mid) return query(L,R,ls,l,mid);else if(L>mid) return query(L,R,rs,mid+1,r);else return merge(query(L,R,ls,l,mid),query(L,R,rs,mid+1,r));}#undef ls#undef rs#undef mid
}t[B+10];
int main()
{
//	freopen("a.in","r",stdin);read(n),read(q);if(n==1){for(;q--;) printf("0\n");return 0;}for(int i=1;i<=n;i++) read(a[i]);for(int i=1;i<n;i++) f[0][i]=(seg){min(a[i],a[i+1]),max(a[i],a[i+1])},g[0][i]=a[i];t[0].build(f[0]);for(int j=1;j<=B;j++){for(int i=1;i<n;i++){if(f[j-1][i].l==f[j-1][i].r) f[j][i]=(seg){g[j-1][f[j-1][i].l],g[j-1][f[j-1][i].l]};else f[j][i]=t[j-1].query(f[j-1][i].l,f[j-1][i].r-1);}t[j].build(f[j]);for(int i=1;i<=n;i++) g[j][i]=g[j-1][g[j-1][i]];}for(int l,r;q--;){read(l),read(r);if(l==1&&r==n){printf("0\n");continue;}ll ans=0;if(l!=r)for(int i=B;i>=0;i--){seg tmp=t[i].query(l,r-1);if(tmp.l!=1||tmp.r!=n){l=tmp.l,r=tmp.r;ans+=(1ll<<i);}if(l==r) break;}if(l==r) printf("-1\n");else{seg tmp=t[0].query(l,r-1);if(tmp.l==1&&tmp.r==n) printf("%lld\n",ans+1);else printf("-1\n");}}return 0;
}
http://www.hkea.cn/news/75350/

相关文章:

  • 建站网址是多少深圳市seo上词多少钱
  • 应用网站开发创建网站花钱吗
  • 2023太原疫情优化设计答案大全
  • 创新的专业网站建设适合小学生的新闻事件
  • 政府机关备案网站百度竞价什么意思
  • 广元专业高端网站建设seo视频
  • 烟台网站建设诚信臻动传媒百度网络营销中心
  • 贵阳网站建设搜王道下拉重庆seo网络推广关键词
  • 大型 网站的建设 阶段百度官方网站下载
  • 江苏专业做网站的公司百度地图导航网页版
  • 怎么去投诉做网站的公司宁波seo外包推广软件
  • 网络营销跟做网站有什么区别线上推广如何引流
  • 如何进行网店推广seo排名优化怎样
  • 什么建站程序好收录上海网络公司seo
  • 电子商务网站建设投资预算小程序平台
  • 广州外贸营销型网站成都移动seo
  • 如何韩国视频网站模板下载 迅雷下载sem竞价托管费用
  • 做网站去哪个平台seo培训学院
  • 网站移动端优化的重点有哪些营销策略ppt
  • 养车网站开发搜狗seo快速排名公司
  • 企业电子商务网站建设武汉百度快速排名提升
  • 建一个网站的流程今天刚刚发生的新闻
  • 建立网站请示优化服务是什么意思
  • 有一个做场景动画的网站山东seo费用多少
  • 阿里云服务器的网站备案流程图营销推广有哪些形式
  • 做宣传用什么网站好手游推广平台有哪些
  • 免费全国网站在线客服软件新手电商运营从哪开始学
  • 0317网站建设怎么建个网站
  • 做网站做电脑版还是手机版好电话营销
  • 深圳网站建设 设计搜索引擎的工作原理是什么?