P4747 [CERC2017] Intrinsic Interval

news/2024/7/7 21:23:21/文章来源:https://www.cnblogs.com/xiaboxin/p/18281513

先说线段数做法

发现一个区间连续有一个性质:这个区间\([l,r]\)存在相邻两个数的对数是\(r-l\)

考虑离线下来,线段数维护每个区间存在相邻数的对数,当前是\(i\),每次扫描新的一个\(a[i]\)进来,因为我扫描线是钦定了以\(i\)位右端点,所以若\(a[i]-1\)的位置在\(a[i]\)前面,我就将\([1,a[i]-1]\)区间+1,因为这样\(l\)\([1,a[i]-1]\)这个范围,我的相邻对数都会+1。\(a[i]+1\)同理。

然后处理查询的话,存在合法的\([l,r]\),就是\(query(l)=r-l\),那我每次线段数赋初值都是下标,就只要判断是否等于\(r\)就可以了,就是看query(1~L)的最大值有没有等于R的。有一个必须的优化:如果\([1,l]\)最大值都到大不了\(r\),那么\([1,l']\)\(l'<l\)都不可以了

#include<bits/stdc++.h>
#define vd void 
#define MAXN 100005
#define pr std::pair<int,int>
#define fi first
#define se second 
int gi(){char c;int x=0,f=0;while(!isdigit(c=getchar()))f|=(c=='-');while(isdigit(c))x=(x*10)+(c^48),c=getchar();return f?-x:x;
}
int n,m,a[MAXN],pos[MAXN];
std::vector<pr>q[MAXN];
std::priority_queue<pr>pq;
pr ans[MAXN];
namespace segtree{ //维护最大值和最大值的位置
#define ls x<<1
#define rs x<<1|1
#define mid ((l+r)>>1)int maxi[MAXN<<2],pmax[MAXN<<2],tag[MAXN<<2];vd up(int x){if(maxi[ls]>maxi[rs])maxi[x]=maxi[ls],/*std::cout<<"$"<<pmax[x]<<' '<<pmax[ls]<<'\n',*/pmax[x]=pmax[ls];else maxi[x]=maxi[rs],pmax[x]=pmax[rs];}vd addtag(int x,int w){maxi[x]+=w,tag[x]+=w;}vd down(int x){if(!tag[x])return;addtag(ls,tag[x]),addtag(rs,tag[x]);tag[x]=0;}vd build(int x,int l,int r){if(l==r)return maxi[x]=pmax[x]=l,void();build(ls,l,mid),build(rs,mid+1,r);up(x);}vd upd(int x,int l,int r,int qx,int qy,int w){if(r<qx||l>qy)return;if(l>=qx&&r<=qy){addtag(x,w);return;}down(x);upd(ls,l,mid,qx,qy,w),upd(rs,mid+1,r,qx,qy,w);up(x);}pr query(int x,int l,int r,int qx,int qy){if(r<qx||l>qy)return {0,0};if(l>=qx&&r<=qy)return std::make_pair(maxi[x],pmax[x]);down(x);pr wl=query(ls,l,mid,qx,qy),wr=query(rs,mid+1,r,qx,qy);if(wl.fi>wr.fi)return wl;else return wr;}
}
using namespace segtree;
bool calc(pr l,int r){pr tmp=query(1,1,n,1,l.fi);if(tmp.fi==r){ans[l.se]=std::make_pair(tmp.se,r);return 1;}return 0;
}
int main(){n=gi();for(int i=1;i<=n;i++)a[i]=gi(),pos[a[i]]=i;m=gi();for(int i=1;i<=m;i++){int x=gi(),y=gi();q[y].emplace_back(std::make_pair(x,i));}build(1,1,n);for(int i=1;i<=n;i++){if(a[i]-1>=1&&pos[a[i]-1]<=i)upd(1,1,n,1,pos[a[i]-1],1);if(a[i]+1<=n&&pos[a[i]+1]<=i)upd(1,1,n,1,pos[a[i]+1],1);for(pr j:q[i])pq.push(j);while(!pq.empty()){pr u=pq.top();if(calc(u,i))pq.pop();else break;}}for(int i=1;i<=m;i++)printf("%d %d\n",ans[i].fi,ans[i].se);return 0;
}

精髓还是把一个要求的东西挖掘一些能维护的性质或信息出来

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

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

相关文章

Vue props的多类型定义报错的问题

报错内容:The "maxHeight" property should be a constructor vue/require-prop-type-constructor 代码中是这样实现的:解决办法: 改成数组型是就可以了

WPF进度条中间写百分比数字

我发现很多同学把思维固话了,通常我们需要实现的进度条是我在网上看到好多例子,但是都没有我的简单,他们不是重写ProcessBar就是使用模板, 可以将TextBlock提取出来啊,灵活一点单独绑定 然后一句代码Panel.ZIndex="1"就搞定了<StackPanel><Button Cont…

mysql连表查询出现数据重复

当我们连表查询遇见数据重复的时候 出现了 好多条 id一样的数据 是错误的 所以我们需要用到distinct关键字进行处理 保证我们数据的唯一性 接下来一个小知识 就是distinct关键字的使用 感谢观看 谢谢

Django中配置media媒体资源 - 存放用户上传的文件

1. 创建media文件夹 2. 配置settings.py# 指定媒体url MEDIA_URL = /media/ # 指定存放媒体文件的文件夹 MEDIA_ROOT = os.path.join(BASE_DIR, media)3. 在urls.py中添加from django.conf import settings from django.conf.urls.static import staticurlpatterns = [path(adm…

OMV数据恢复NAS阵列丢失

针对OMV数据恢复中NAS阵列丢失、RAID设备消失以及文件系统损坏的情况的操作。 一、确认故障现象: 1.检查OMV管理界面,确认RAID设备是否已消失,文件系统是否无法访问。 2.记录所有相关错误信息和日志,以便后续分析。 评估数据重要性: 确定丢失数据的重要性和紧急性,以便制…

联想服务器阵列数据恢复Raid5/0/6数据库RaidZ/虚拟机

针对联想服务器阵列数据恢复,特别是涉及RAID 5/0/6、数据库RAID Z以及虚拟机的情况 一、RAID 5/0/6 数据恢复故障诊断 确定故障类型:首先需要明确是RAID 5/0/6阵列中的哪一部分出现故障,如硬盘掉线、阵列卡损坏、意外断电等。 收集信息:记录服务器型号、RAID配置、硬盘序列…

NAS阵列恢复数据数据恢复开盘

NAS阵列数据恢复,尤其是涉及开盘(即物理层面打开硬盘外壳以进行内部修复或数据提取)的情况,是一个复杂且技术密集型的过程。 一、故障诊断: 1.确定NAS阵列中数据丢失或无法访问的具体原因,如硬盘物理损坏、RAID阵列崩溃、文件系统故障等。 2.记录所有硬盘的序列号、型号及…

2024 年人工智能和数据科学的五个主要趋势

引言 2023年,人工智能和数据科学登上了新闻头条。生成性人工智能的兴起无疑是这一显著提升曝光度的驱引言2023年,人工智能和数据科学登上了新闻头条。生成性人工智能的兴起无疑是这一显著提升曝光度的驱动力。那么,在2024年,该领域将如何继续占据头条,并且这些趋势又将如何…

线段树的基本知识和初级运用

主要介绍了线段树的基本知识点和初级运用前言 线段树绝对是出题人最爱考的高级数据结构了。它快、灵活、码量也大,相当考验 OIer 的综合能力。所以好好学习一下线段树是相当必要的。 基础 线段树是基于二叉树的。通过为二叉树的每个节点赋予线段的意义,线段树可以维护很多的区…

信息摘要技术

信息摘要 定义 信息摘要就是原数据通过某个算法生成一个固定长度的单向散列值。 特点 1、输出长度固定:无论输入的长度和值如何,计算得到的哈希值长度总是固定的。 2、不可逆性(单向):不可能使用散列值推出原文件内容 3、无碰撞性:想要找到两个不同的输入值,使它们哈希后…

完美解决stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.

解决方案:node版本太高了,我同时说他环境是node14的,我就来了个14.18的,结果还是不是,应该是14系列,我的二级版本还是高了。 python什么的安装了没什么用!!! 一步一步来,先解决第一部分: 错误提示的意思是说我没有python,我电脑里确实没有下载python,但实际上不用下…

DVT:华为提出动态级联Vision Transformer,性能杠杠的 | NeurIPS 2021

论文主要处理Vision Transformer中的性能问题,采用推理速度不同的级联模型进行速度优化,搭配层级间的特征复用和自注意力关系复用来提升准确率。从实验结果来看,性能提升不错 来源:晓飞的算法工程笔记 公众号论文: Not All Images are Worth 16x16 Words: Dynamic Transfor…

论文查重

代码说明 类的设计 PaperPlagiarismChecker 类 这个类是算法的核心,负责实现论文查重的具体逻辑和计算。它可能包含以下主要函数: calculateCosineSimilarity(String text1, String text2): 计算两个文本之间的余弦相似度。这是核心的相似度计算函数。 getWordFrequency(Stri…

常见排序原理及 python 实现

时间复杂度与空间复杂度 常用O(1)或O(n)表示,其中1表示一个单位(最简单的单位,可以是多个或1个,但在时间上总体是较低且连续的),时间通常指的是程序运行时间,空间则是指程序在运行时所占用的内存空间。各个阶段的复杂度可用下面的顺序比较: O(1) < O(logn) < O(n) &…

【日记】在街上跳舞被同事看见了(470 字)

正文昨晚跳舞,照例在街上表演,被单位里的保洁阿姨撞见了…… 我以为这就完了,结果她还拍了视频发给做饭阿姨。晚上吃饭无意间聊起才知道有这回事。我竟一时间不知该哭还是该笑…….今天非常非常闲。虽然不是没工作,只是我懒得去做,堆在那里罢了。下午还差点跟主管吵起来(…

使用Filter接口编写过滤器解决post乱码

在使用tomcat9以及之前的版本,request-character-encoding和response-character-encoding使用的字符编码默认不是utf-8,所以导致前端发送到后台的中文乱码.如果使用的是tomcat10以及之后的版本,在apache-tomcat-10.1.25\conf\web.xml已设置好默认的字符集编码为utf-8,如果所示:…

使用EF 连接 数据库 SQLserver、MySql 实现 CodeFirst

1.新建项目,下载Nuget安装包 创建项目需要注意几点,如果是基于 .net framework 的项目 需要选择 相应版本的 EF, 如果是跨平台则选择EF Core版本。 我这里选择的是 .net framework 版本。红框里面是 实现EF Code First 需要的包。对应的版本: EntityFramework 6.3.0 MySql.D…

AGNN论文阅读笔记

Attention-Based Graph Neural Network for News Recommendation论文阅读笔记 Abstract 存在的问题: ​ 用户的历史点击序列信息对用户兴趣的影响也不尽相同,简单地将它们结合起来并不能反映这种差异。 提出方法: ​ 我们提出了一种基于注意力的图神经网络新闻推荐模型。在我…