King of Range

King of Range

题意:

给你n个数,有m个询问,每次询问一个x,问有多少个区间的最大值减最小值大于x

题解:

我一开始的想法
st表实现区间最大减最小,利用二分来找这个区间范围,复杂度O(nmlogn),正好被卡
一个签到题给做复杂了
我们这样想,我们定义左端i,然后去移动右端点pos,当出现pos大于k时,此时pos位置之后的肯定与l组成的区间也大于k,然后左端点移动(i++),右端点在pos继续走(pos不清零),为什么?
结合代码分析:
我们每次记录答案都是当区间差值刚好大于k时退出,也就是pos位置肯定是最大值或者最小值(会影响差值,不然也不可能跳出while循环)。记录完答案后左端点移动一位,此时区间是[i+1,pos],第l位没了,但是如果此时区间差值还是大于k,说明区间最值不是第i位,pos之后的右端点都是可以的,直接累加答案,如果小于等于k,继续右推右端点。
相当于这个差值区间是有这种性质,可以直接在前一个的基础上继承过来,不用重新找
这样复杂度应该是(2n)
总复杂度是(2mn)

for(int i = 1;i <= n;i++){while(query_max(i,pos)-query_min(i,pos)<=k&&pos+1<=n){pos++;}if(query_max(i,pos)-query_min(i,pos)>k){ans+=n-pos+1;}
}

官方题解是这样做的:
因为区间端点都是单调的,所以维护两个单调队列,其中一个递增序列,队首维护最小值,一个递减序列,队首维护最大值,每次弹出两个队列中队首考前的一个,直到极差<=k,这样就可以在均摊O(1)的时间内求Ri了
其实就相当于维护区间最大最小值,更新左端点,在左端点右侧的就要被弹出,这样一直维护
O(nm)

题解:

st+尺取

#include<bits/stdc++.h>using namespace std;
const int inf=0x3f3f3f3f;
typedef long long ll;
const int maxn = 1e5+50;int ffmax[maxn][20];
int ffmin[maxn][20];
int a[maxn];
int n,m,k;
double lg2[maxn];
int h;
int max2(int x,int y)
{if(x<y)return y;return x;
}
int min2(int x,int y)
{if(x<y)return x;return y;
}
void init(){memset(ffmax,0,sizeof(ffmax));memset(ffmin,0x3f,sizeof(ffmin));for(int i = 1;i <= n;i++){ffmax[i][0] = ffmin[i][0] = a[i];}for(int j = 1;j <=int(lg2[n]/lg2[2]);j++){		for(int i = 1;i+(1<<j)-1<= n;i++){			ffmax[i][j] = max2(ffmax[i][j-1],ffmax[i+(1<<(j-1))][j-1]);ffmin[i][j] = min2(ffmin[i][j-1],ffmin[i+(1<<(j-1))][j-1]);}}} int query_max(int l,int r){int s = int(lg2[r-l+1]/lg2[2]);//cout<<l<<" "<<l+(1<<s)-1<<" "<<r<<" "<<r-(1<<s)+1<<" "<<s<<endl;return max2(ffmax[l][s],ffmax[r-(1<<s)+1][s]);
}int query_min(int l,int r){int s = int(lg2[r-l+1]/lg2[2]);return min2(ffmin[l][s],ffmin[r-(1<<s)+1][s]);
}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=100000;i++)lg2[i]=log(i); //cout<<lg2[2];h=int(lg2[n]/lg2[2]);for(int i = 1;i <= n;i++)	scanf("%d",&a[i]);init();//cout<<ffmax[3][2]<<endl;while(m--){scanf("%d",&k);ll ans = 0;int pos=0;for(int i = 1;i <= n;i++){while(query_max(i,pos)-query_min(i,pos)<=k&&pos+1<=n){pos++;}if(query_max(i,pos)-query_min(i,pos)>k){ans+=n-pos+1;}}printf("%lld\n",ans);} return 0;
}
/*
10 10
1 2 3 4 5 6 7 8 9 10
2
1 2 3 4 5*/ 

单调队列做法:

#include<bits/stdc++.h>
using namespace std;
long long a[100100];
long long qmax[100100];
long long qmin[100100];
int main(){int n,m,k;scanf("%d %d",&n,&m);for(int i=1;i<=n;++i){scanf("%d",&a[i]);}while(m--){scanf("%d",&k); long long ans=0;int l=1,h1=1,t1=0,h2=1,t2=0;for(int i=1;i<=n;i++){while(h1<=t1&&a[i]>=a[qmax[t1]]) t1--; while(h2<=t2&&a[i]<=a[qmin[t2]]) t2--;qmax[++t1]=i;qmin[++t2]=i;while(h1<=t1&&h2<=t2&&a[qmax[h1]]-a[qmin[h2]]>k){ans+=n-i+1;l++;if(qmax[h1]<l) h1++;if(qmin[h2]<l) h2++;}} cout<<ans<<endl;}
}

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

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

相关文章

膜拜大丹(结论+二元环)

problem 有两个国家&#xff0c;国家 AAA 有 nnn 座城市&#xff0c;国家 BBB 有 mmm 座城市&#xff0c;两个国家间有若干条单向航线。 具体地&#xff0c;有长度为 nnn 的数组 aaa 和长度为 mmm 的数组 bbb。国家 AAA 的第 iii 座城市有单向航线可以到达国家 BBB 的 1∼ai1…

Jewels

Jewels 题意&#xff1a; 你的坐标是(0,0,0)&#xff0c;有m个宝物&#xff0c;分别坐标是是(xi,yi,zi),它的z坐标以每秒下沉vi深度&#xff0c;你每次获取一个宝物的费用是两者的距离的平方&#xff0c;每秒只能获取一个宝物&#xff0c;从第0秒开始&#xff0c;问获取所有宝…

[NewLife.XCode]脏数据

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;支持nfx/netstandard&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中&#xff0…

[学习笔记] 二分图基础定理的相关证明

最小点集覆盖最大匹配 最小点集覆盖&#xff1a;选出最少的点使得每条边都至少有一个端点被选。 先证最小点集覆盖 ≥\ge≥ 最大匹配 假设最大匹配为 xxx&#xff0c;即有 xxx 条边两两之间没有公用点。 光覆盖这些边就要用到 xxx 个点。 “不少于”已证。 再证最小点集覆盖 …

Boxes

Boxes 题意&#xff1a; 有n个盒子&#xff0c;每个盒子里要么是黑球&#xff0c;要么是白球&#xff0c;你可以花C的代码得知剩下所有盒子中黑球数量和白球数量&#xff0c;(只是知道总数量&#xff0c;并不知道具体哪个盒子里是什么)&#xff0c;你可以可以花费wi的代价开第…

Double Strings

Double Strings 题意&#xff1a; 给你s和t两个字符串&#xff0c;在其中选出两个等长的子序列(可以不连续)a&#xff0c;b&#xff0c;满足a的字典序严格小于b的字典序&#xff0c;问方案数,答案mod(1e97) 题解&#xff1a; 好的方案的构成是一段相同的前缀一个不同的字符…

你真的了解用户吗?-浅谈《用户画像》的意义和方法

作者&#xff1a;陈炯关于作者系统集成项目管理高级工程师某大型国有银行高级质量管理师从事IT项目管理工作十余年具有丰富的开发与管理经验公司内部敏捷转型的发起者之一深度参与敏捷实践与总结大学校园里流传最广的一句话是什么&#xff1f;“防火防狼防师兄”。为什么师兄这…

[学习笔记] 二次剩余

二次剩余 对于素数 ppp 和数 aaa&#xff0c;满足 (a,p)1(a,p)1(a,p)1。&#xff08;注意 aaa 不一定小于 ppp&#xff09; 若 ∃xx2≡a(modp)\exist_{x}\ x^2\equiv a\pmod p∃x​ x2≡a(modp)&#xff0c;则称 aaa 是模 ppp 意义下的二次剩余&#xff0c;xxx 称为该二次剩余…

Script Lab 续:为 Officejs 开发配置 VSCode 环境

垫场AA&#xff1a;深度&#xff1a;从 Office 365 新图标来看微软背后的设计新理念--------------------------------------------------前期01&#xff1a;尝试&#xff1a;Script Lab&#xff0c;快速 Office 365 开发工具前期02&#xff1a;尝试&#xff1a;Script Lab&…

P3567 [POI2014]KUR-Couriers

P3567 [POI2014]KUR-Couriers 题意&#xff1a; 给一个长度为 n 的正整数序列 a。共有 m 组询问&#xff0c;每次询问一个区间 [l,r] &#xff0c;是否存在一个数在 [l,r]中出现的次数严格大于一半。如果存在&#xff0c;输出这个数&#xff0c;否则输出 0。 题解&#xff1…

[WC 2022 Day3 zmy] Od deski do deski(dp)

设 fi:1∼if_{i}:1\sim ifi​:1∼i 能否分成若干个首尾相同的区间 则有 fiORj<i(fj−1∧ajai)f_{i}\text{OR}_{j<i}(f_{j-1}\wedge a_ja_i)fi​ORj<i​(fj−1​∧aj​ai​)。 这是最原始的暴力 dpdpdp&#xff0c;时间 O(n2m)O(n^2m)O(n2m)。 事实上&#xff0c;这…

编程方式重启 ASP.NET Core 网站

点击上方蓝字关注“汪宇杰博客”常言道&#xff0c;多喝热水&#xff0c;重启试试。有时候当应用工作不正常&#xff0c;重启也许能解决问题。但是程序员通常接触不到服务器系统权限。而运维人员和公司流程经常人为制造麻烦阻止我们去重启应用。老实的程序员不善言辞交际&#…

可持久化3--可持久化01Trie

01Trie 可持久化 01Trie 的方式和可持久化值域线段树的方式是相似的&#xff0c;只是以 01字典树 的方式来维护值域。一般用来解决异或相关的能够按位贪心的题目。 其实就是将可持久化线段树中的操作嫁接到01Trie中&#xff0c;这样就是解决任意一个区间内的问题。 例题&…

AGC044E Pandom Pawn(期望+凸包)

最开始我们先旋转一下这张桌子&#xff0c;使得 A1An1max⁡{Ai}A_1A_{n1}\max\{A_i\}A1​An1​max{Ai​}。 这是非常有效的&#xff0c;因为我们把环就变成链&#xff0c;只要到达了链的任意一端 1/n11/n11/n1 就肯定会结束游戏。 定义 Ei:E_i:Ei​: 从 iii 开始游戏&#xf…

.NET Core 容器化调查

前几天在微信朋友圈做了一个简单的调查&#xff0c;参与人数有500人&#xff0c;调查结果如下&#xff1a;使用K8S的比例非常类似于2017年初我在公众号里针对.NET Core的使用情况的比例。.NET Core是针对云原生应用开发而重新设计的一个平台&#xff0c;.NET Core借鉴了.NET Fr…

P4735 最大异或和

P4735 最大异或和 题意&#xff1a; 一个非负序列a&#xff0c;初始长度为n&#xff0c;有两种操作&#xff1a; A x&#xff0c;在序列中添加x&#xff0c;n加一Q l r x,询问操作&#xff0c;询问一个位置p&#xff0c;p满足l<p<r,使得p到位置n的的异或和与x的异或值…

[学习笔记] 单位根反演

单位根反演 [k∣n]1k∑i0k−1ωkin[k\mid n]\frac 1k\sum_{i0}^{k-1}\omega_k^{in}[k∣n]k1​∑i0k−1​ωkin​ kkk 次单位根是 kkk 次幂为 111 的复数解 wkw_kwk​。利用单位圆和单位根的关系很容易证明。 k∣nk\mid nk∣n 显然 ωkin\omega_k^{in}ωkin​&#xff0c;相当于…

NET Core微服务之路:再谈分布式系统中一致性问题分析

前言一致性&#xff1a;很多时候表现在IT系统中&#xff0c;通常在分布式系统中&#xff0c;必须&#xff08;或最终&#xff09;为多个节点的数据保持一致。世间万物&#xff0c;也有存在相同的特征或相似&#xff0c;比如儿时的双胞胎&#xff0c;一批工厂流水线的产品&#…

P4592 [TJOI2018]异或

P4592 [TJOI2018]异或 题意&#xff1a; 现在有一颗以 1 为根节点的由 n 个节点组成的树&#xff0c;节点从 1 至 n 编号。树上每个节点上都有一个权值 vi。现在有 q 次操作&#xff0c;操作如下&#xff1a; 1 x z&#xff1a;查询节点 x 的子树中的节点权值与 z 异或结果的…

[HAOI2018] 染色(二项式反演+NTT)

洛谷链接 显然颜色数量不会超过 lim⁡min⁡(m,ns)\lim\min(m,\frac ns)limmin(m,sn​) fi:f_i:fi​: 至少有 iii 种颜色恰好出现了 sss 次的方案数。 则 fi(mi)⋅n!(s!)i(n−is)!⋅(m−i)n−isf_i\binom mi\frac{n!}{(s!)^i(n-is)!}(m-i)^{n-is}fi​(im​)⋅(s!)i(n−is)!n!​…