首页 > 其他分享 >小y的序列(ST表&二分)---牛客练习赛96-C

小y的序列(ST表&二分)---牛客练习赛96-C

时间:2024-03-15 20:31:56浏览次数:34  
标签:maxx 练习赛 cin int mid long ST --- ans

牛客练习赛96-小y的序列
在这里插入图片描述

解析

ST表预处理区间极值差

可以发现,对于一个区间 [ l , r ] [l,r] [l,r],其极值差存在单调不减的性质,当我们区间在右侧添加一个值 x x x 时,此时最小值不变或减小,最大值不变或增大,所以总区间的极值差不减。

对于每一个 i i i,固定其为左端点,然后在 [ i , n ] [i,n] [i,n] 二分右端点,找到恰好满足 M a x − M i n = k Max-Min = k Max−Min=k 的那一段区间

#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define endl '\n'
const int N=1e6+5;

int n,k;
int a[N],maxx[N][21],minn[N][21];

void init(){
	for(int i=1;i<=n;i++){
		maxx[i][0]=a[i];
		minn[i][0]=a[i];
	}
	for(int j=1;(1<<j)<=n;j++){
		for(int i=1;i+(1<<j)-1<=n;i++){
			maxx[i][j]=max(maxx[i][j-1],maxx[i+(1<<(j-1))][j-1]);
			minn[i][j]=min(minn[i][j-1],minn[i+(1<<(j-1))][j-1]);
		}
	}
}
int check(int l,int r){
	int k=log2(r-l+1);
	return max(maxx[l][k],maxx[r-(1<<k)+1][k])-min(minn[l][k],minn[r-(1<<k)+1][k]);
}
void solve(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	init();
	long long ans=0;
	for(int i=1;i<=n;i++){
		int l=i,r=n+1;
		while(l<r){
			int mid=l+r>>1;
			if(check(i,mid)>=k) r=mid;
			else l=mid+1;
		}
		ans-=l;
		l=i,r=n+1;
		while(l<r){
			int mid=l+r>>1;
			if(check(i,mid)>k) r=mid;
			else l=mid+1;
		}
		ans+=l;
	}
	cout<<ans;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int tt=1;
//	cin>>tt;
	while(tt--) solve();
	return 0;
}

标签:maxx,练习赛,cin,int,mid,long,ST,---,ans
From: https://blog.csdn.net/JungleZRD/article/details/136749006

相关文章

  • 深度学习入门基于python的理论与实现-第三章神经网络
    目录激活函数阶跃函数sigmoid函数ReLU函数三层神经网络的实现输出层设计恒等函数和softmax函数输出层的神经元数量手写数字识别MINIST数据集神经网络的推理处理批处理激活函数激活函数是连接感知机和神经网络的桥梁阶跃函数阶跃函数是在感知机中使用的激活函数。\[h(x)=\begi......
  • 3月15号-应用层与TCP
    昨天的TCP过于简化,TCP有着多种应用,控制数据流出速率保证网络速率平衡(这跟慢启动方法有关),支持传输和重传,建立到两个计算机之间的直接联系。应用层的话则是更加日常的网页,应用程序,是针对用户最前线的地方。本身在作出网络请求时需要遵守协议(约定的数据传输规则),如http协议,请求和回复......
  • static
      静态的属性是随着字节码文件的加载而在堆内存中加载,其他没有被修饰的属性是创建对象的时候在堆里加载工具类会将构造方法私有化,防止多余操作(创建工具类对象)因为可以直接用类名调对象内存相关,静态的方法和成员在字节码文件加载的时候就加载了,而其他的需要调用的时候才......
  • DC-4
    DC-4渗透测试过程主机扫描arp-scan-l靶机ip:192.168.56.110端口扫描nmap-A192.168.56.110StartingNmap7.94SVN(https://nmap.org)at2024-03-1507:08EDTNmapscanreportfor192.168.56.110Hostisup(0.0011slatency).Notshown:998closedtcpports......
  • 力扣刷题Days19-637.二叉树的层平均数
    目录1,题目2,代码2.1广度优先遍历2.2深度优先遍历3,学习与总结1,题目给定一个非空二叉树的根节点 root ,以数组的形式返回每一层节点的平均值。2,代码2.1广度优先遍历/***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*......
  • 力扣刷题Days16 - 191.位1的个数(js)
    目录1,题目2,代码2.1逐位判断核心代码2.1.2逐位判断22.2位运算优化3,学习与总结1,题目编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为'1'的个数(也被称为汉明重量)。2,代码2.1逐位判断/***@param{number}n-apositivein......
  • RestController:Spring Framework 中用于创建 RESTful Web 服务的注解
    RestController 是SpringFramework中用于创建RESTfulWeb服务的注解。它简化了构建RESTfulWeb服务的过程,使得开发者能够更专注于业务逻辑的实现,而不是底层的HTTP请求和响应处理。一、RestController的基本概念RestController 是SpringWeb模块中的一个核心注......
  • L1-7 分寝室 [java]
    分数20学校新建了宿舍楼,共有 n 间寝室。等待分配的学生中,有女生 n0​ 位、男生 n1​ 位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。现请你写程序完成寝室的自动分配。分配规则如下:男女生不能混住;不允许单人住一间寝室;对每种性......
  • 【Android】使用Android Studio打包APK文件
    文章目录1.新建项目2.打包生成APK3.安装APK 1.新建项目打包APK之前,首先需要新建项目,有基础的可以跳过。无基础的可以参考:使用AndroidStudio运行HelloWorld项目2.打包生成APK1.找到Build->GenerateSignedBundleorAPK->勾选APK  2.首次需要创建......
  • 【Android】使用Android Studio运行Hello World项目
    文章目录1.JDK的安装与配置2.AndroidStudio的安装3.运行HelloWorld项目3.1新建项目3.2修改项目配置3.2.1修改UI界面3.2.2配置AndroidSDK3.3添加并运行虚拟设备3.4运行项目 1.JDK的安装与配置想要使用AndroidStudio,必须先配置Java环境,需要......