202112CSPT4磁盘文件操作
题意:有n个id号,m段空间,k个操作:
0 0 0:从L开始到R或遇到第一个其他非空id号为止,写入 i d id id号以及值 v a l val val;如果成功写入则输出写入成功的最右位置,否则输出-1
1 1 1:若 [ L , R ] [L,R] [L,R]全为同目标id,则删除id号以及值val并输出OK;否则输出FAIL
2 2 2:若 [ L , R ] [L,R] [L,R]全为空且上次占用id号全为目标id号,则恢复删除结果并输出OK;否则输出FAIL
3 3 3:查找单点P的id号以及val值;为空则输出0 0
#include<bits/stdc++.h>
using namespace std;
#define ls p<<1
#define rs p<<1|1
struct Node
{int val,id1,id2,idpre;//值,插入id,表示区间都为相同的id,之前被删除的id int lazyval,lazyid1,lazyid2,lazyidpre;//懒标记 int l,r;
}t[5000010];
vector<int> v;
int ID[800010],q[800010][4];
int n,m,k;
int find(int s)
{return lower_bound(v.begin(),v.end(),s)-v.begin()+1;
}
void pushup(int p)
{t[p].val=(t[ls].val==t[rs].val)?t[ls].val:1e9+10;if(t[ls].id1==-1||t[rs].id1==-1)t[p].id1=-1;else if(t[ls].id1==t[rs].id1)t[p].id1=t[ls].id1;else if(t[ls].id1==0)t[p].id1=t[rs].id1;else if(t[rs].id1==0)t[p].id1=t[ls].id1;else t[p].id1=-1;if(t[ls].id2==-1||t[rs].id2==-1)t[p].id2=-1;else if(t[ls].id2==t[rs].id2)t[p].id2=t[ls].id2;else t[p].id2=-1;if(t[ls].idpre==-1||t[rs].idpre==-1)t[p].idpre=-1;else if(t[ls].idpre==t[rs].idpre)t[p].idpre=t[ls].idpre;else t[p].idpre=-1;return ;
}
void build(int p,int l,int r)
{t[p].l=l;t[p].r=r;if(l==r){t[p].val=0;t[p].id1=t[p].id2=t[p].idpre=0;t[p].lazyval=1e9+10;t[p].lazyid1=t[p].lazyid2=t[p].lazyidpre=-1;return ;}int mid=(l+r)>>1;build(ls,l,mid);build(rs,mid+1,r);t[p].lazyval=1e9+10;pushup(p);
}
void spread(int p)
{if(t[p].lazyval!=1e9+10){t[ls].val=t[rs].val=t[p].lazyval;t[ls].lazyval=t[rs].lazyval=t[p].lazyval;t[p].lazyval=1e9+10; }if(t[p].lazyid1!=-1){t[ls].id1=t[rs].id1=t[p].lazyid1;t[ls].lazyid1=t[rs].lazyid1=t[p].lazyid1;t[p].lazyid1=-1;}if(t[p].lazyid2!=-1){t[ls].id2=t[rs].id2=t[p].lazyid2;t[ls].lazyid2=t[rs].lazyid2=t[p].lazyid2;t[p].lazyid2=-1;}if(t[p].lazyidpre!=-1){t[ls].idpre=t[rs].idpre=t[p].lazyidpre;t[ls].lazyidpre=t[rs].lazyidpre=t[p].lazyidpre;t[p].lazyidpre=-1;}return ;
}
int findR(int p,int l,int id)
{spread(p);if(t[p].r<l||t[p].id1==id||t[p].id1==0)return -999;else if(t[p].id2!=-1)return t[p].l-1;else {int mid=(t[p].l+t[p].r)>>1;int R=(l<=mid)?findR(ls,l,id):-999;return (R==-999)?findR(rs,l,id):R;}
}
void change(int p,int l,int r,int k,int id,bool ig=0)
{if(t[p].r<l||t[p].l>r)return ;if(t[p].l>=l&&t[p].r<=r){if(k!=1e9+10)t[p].val=t[p].lazyval=k;t[p].id1=id;t[p].id2=id;t[p].lazyid1=id;t[p].lazyid2=id;if(!ig)t[p].idpre=t[p].lazyidpre=id;return ;}spread(p);int mid=(t[p].l+t[p].r)>>1;if(l<=mid)change(ls,l,r,k,id,ig);if(mid<r)change(rs,l,r,k,id,ig);pushup(p);
}
int askidsame(int p,int l,int r,int id,bool ig=0)
{if(t[p].r<l||t[p].l>r)return 0;if(t[p].l>=l&&t[p].r<=r){if(ig)return (t[p].id2==0&&t[p].idpre==id);//恢复 else return t[p].id2==id;//删除 } spread(p);int mid=(t[p].l+t[p].r)>>1;int same=1;if(l<=mid)same=same&&askidsame(ls,l,r,id,ig);//区间都要id相同 if(mid<r&&same)same=same&&askidsame(rs,l,r,id,ig);return same;
}
int askval(int p,int x)
{if(x>=t[p].l&&x<=t[p].r&&t[p].val!=1e9+10)return t[p].val;spread(p);int mid=(t[p].l+t[p].r)>>1;int val=0;if(x<=mid)val=askval(ls,x);else val=askval(rs,x);return val;
}
int askid(int p,int x)
{if(x>=t[p].l&&x<=t[p].r&&t[p].id2!=-1)return t[p].id2;spread(p);int mid=(t[p].l+t[p].r)>>1;int id2=-1;if(x<=mid)id2=askid(ls,x);else id2=askid(rs,x);return id2;
}
int main()
{cin>>n>>m>>k;for(int i=1;i<=k;i++){cin>>q[i][0];if(q[i][0]==0){cin>>ID[i]>>q[i][1]>>q[i][2]>>q[i][3];v.push_back(q[i][1]);v.push_back(q[i][1]-1);v.push_back(q[i][2]);v.push_back(q[i][2]+1);}if(q[i][0]==1){cin>>ID[i]>>q[i][1]>>q[i][2];v.push_back(q[i][1]);v.push_back(q[i][1]-1);v.push_back(q[i][2]);v.push_back(q[i][2]+1);}if(q[i][0]==2){cin>>ID[i]>>q[i][1]>>q[i][2];v.push_back(q[i][1]);v.push_back(q[i][1]-1);v.push_back(q[i][2]);v.push_back(q[i][2]+1);}if(q[i][0]==3){cin>>q[i][1];v.push_back(q[i][1]);}}sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());//将多余的数字去除build(1,1,v.size());for(int i=1;i<=k;i++){int L=find(q[i][1]),R=find(q[i][2]);//cout<<"!"<<L<<" "<<R<<endl;if(q[i][0]==0){int realR=findR(1,L,ID[i]);//cout<<"!!"<<realR<<endl; if(realR!=-999)R=min(realR,R);//找到右区间 if(L<=R){cout<<v[R-1]<<endl;//cout<<q[i][2]<<endl;// 注意返回离散化前的值change(1,L,R,q[i][3],ID[i]);}else cout<<"-1"<<endl;//如果R大于l说明区间无法赋值 }else if(q[i][0]==1){if(askidsame(1,L,R,ID[i])){cout<<"OK"<<endl;change(1,L,R,1e9+10,0,1);}else cout<<"FAIL"<<endl;}else if(q[i][0]==2){if(askidsame(1,L,R,ID[i],1)){cout<<"OK"<<endl;change(1,L,R,1e9+10,ID[i],1);}else cout<<"FAIL"<<endl;}else if(q[i][0]==3){int id=askid(1,L);int val=askval(1,L);if(id==0)cout<<"0 0"<<endl;else cout<<id<<" "<<val<<endl;}//cout<<"!!"<<t[3].id1<<" "<<t[3].id2<<endl;} return 0;
}
相关文章:
202112CSPT4磁盘文件操作
题意:有n个id号,m段空间,k个操作: 0 0 0:从L开始到R或遇到第一个其他非空id号为止,写入 i d id id号以及值 v a l val val;如果成功写入则输出写入成功的最右位置,否则输出-1 1 1 1:若 [ L , …...
5GC SBA架构
协议标准:Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述说明NSSFNetwork Slice Selection Function网络切片选择,根据UE的切片选择辅助信息、签约信息等确定UE允许接入的网络切片实例。NEF Network Exposure Function网络开…...
《求生之路2》服务器如何选择合适的内存和CPU核心数,以避免丢包和延迟高?
根据求生之路2服务器的实际案例分析选择合适的内存和CPU核心数以避免丢包和延迟高的问题,首先需要考虑游戏的类型和对服务器配置的具体要求。《求生之路2》作为一款多人在线射击游戏,其服务器和网络优化对于玩家体验至关重要。 首先,考虑到游…...
精读服务器默认rsyslog的配置文件
rsyslog的配置文件 rsyslog.conf #### MODULES ####$ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal #$ModLoad imklog # reads kernel messages (the same are read…...
Vue2:用node+express部署Vue项目
一、编译项目 命令 npm run build执行命令后,我们会在项目文件夹中看到如下生成的文件 二、部署Vue项目 接上一篇,nodeexpress编写轻量级服务 1、在demo中创建static文件夹 2、将dist目录中的文件放入static中 3、修改server.js文件 关键配置&…...
前端开发人员如何做好SEO
前端开发人员如何做好SEO SEO工作不仅限于专业人员。前端开发者也可以在日常开发中实施一些代码层面的SEO优化。 以下是一些前端常用的SEO方法: 设置合理的title、keywords、description title、keywords、description对SEO至关重要,需贴合页面内容编…...
推荐收藏!分享 PyTorch 中一些高级的索引和选择操作技巧
关于 Pytorch ,我之前分享过很多篇,喜欢的可以收藏、关注、点赞。 这一次,我准备了 20节 PyTorch 中文课程小白学 PyTorch 系列:54个超强 pytorch 操作9个技巧让你的 PyTorch 模型训练飞快!Keras 3.0发布:…...
Apache Calcite 快速入门指南
Apache Calcite 快速入门指南 参考地址:Apache Calcite 快速入门指南 - 知乎 Apache Calcite 是一个动态数据管理框架,提供了:SQL 解析、SQL 校验、SQL 查询优化、SQL 生成以及数据连接查询等典型数据库管理功能。Calcite 的目标是 One Size …...
基于MUSIC算法的六阵元圆阵DOA估计matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于MUSIC算法的六阵元圆阵DOA估计matlab仿真. 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序 ........................................…...
Mysql索引学习
mysql索引-自学版 1 索引语法2 索引类别3 索引原理磁盘IO与预读索引数据结构 B树B树的前生今世B 树代码(进阶) 4 索引使用策略及优化优化索引的几种方法 索引常见面试题面经实战 1 索引语法 索引的语法:创建、修改、增加、删除等操作&#x…...
【MySQL】:高效利用MySQL函数实用指南
🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. MySQL函数概论二. 字符串函数三. 数值函数四. 日期函数五. 流程函数…...
vue3+electron开发桌面应用,静态资源处理方式及路径问题总结
目录 1、静态资源放到src/assets/目录下 2、静态路径和动态路径的写法 3、编译时vite.config.js的配置...
2024全国水科技大会暨高氨氮废水厌氧氨氧化处理技术论坛(四)
一、会议背景 为积极应对“十四五”期间我国生态环境治理面临的挑战,加快生态环境科技创新,构建绿色技术创新体系,全面落实科学技术部、生态环境部等部委编制的《“十四五”生态环境领域科技创新专项规划》,积极落实省校合作&…...
基于springboot+vue的美食推荐商城
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.02.05-2024.02.10
论文目录~ 1.ViGoR: Improving Visual Grounding of Large Vision Language Models with Fine-Grained Reward Modeling2.CLIP-Loc: Multi-modal Landmark Association for Global Localization in Object-based Maps3.Exploring Visual Culture Awareness in GPT-4V: A Compre…...
华为笔记本自带windows11如何改为win10
目录 一、前言 二、遇到问题 三、问题解决 一、前言 新购买的华为笔记本电脑自带windows11系统,虽然是正版系统,但还是希望能重新装Windows10版本。一是我已经习惯此系统,二是该系统上运行的开发工具比较稳定。 二、遇到问题 说干就干&…...
Axios 面试题
Axios 面试题 问题描述: 什么是 Axios?它的主要特点是什么? 答案: Axios 是一个基于 Promise 的 HTTP 客户端库,用于在浏览器和 Node.js 中发送 HTTP 请求。它具有以下主要特点: 支持浏览器和 Node.js 环境…...
速盾:cdn服务器怎么做
CDN(Content Delivery Network)即内容分发网络,是一种通过将内容(如网页、图片、视频等)缓存到离用户较近的服务器上,以提升用户访问速度和减轻源服务器负载的解决方案。在CDN中,CDN服务器是承担…...
基础小白快速入门c语言--
变量: 表面理解:在程序运行期间,可以改变数值的数据, 深层次含义:变量实质上代表了一块儿内存区域,我们可以将变量理解为一块儿内存区域的标识,当我们操作变量时,相当于操作了变量…...
CI/CD:安装配置Gitlab Runner
CI/CD笔记 安装配置Gitlab Runner - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/136296840 Address of this art…...
SITS2026圆桌深度复盘:大模型工程化人才能力图谱(2024-2026紧缺岗位胜任力三维模型首次公开)
第一章:SITS2026圆桌:大模型工程化人才需求 2026奇点智能技术大会(https://ml-summit.org) 工程化落地的核心能力断层 当前大模型应用正从“能跑通”迈向“可交付、可运维、可迭代”的工业级阶段,但企业普遍反馈:既懂LLM原理又掌…...
从‘链式法则’到‘误差信号’:手绘流程图拆解BP,像调试程序一样理解神经网络学习
从‘链式法则’到‘误差信号’:手绘流程图拆解BP,像调试程序一样理解神经网络学习 第一次看到反向传播的数学推导时,那些偏导数和链式法则让我想起了刚学编程时调试递归函数的痛苦经历。直到有一天,我把神经网络的前向传播想象成函…...
从零构建AI辅助逆向分析环境:JADX-MCP与LLM的实战集成指南
1. 为什么需要AI辅助逆向分析? 逆向工程一直是安全研究员和开发者的重要技能,但面对日益复杂的Android应用,传统的手工分析方式效率低下。一个中等规模的APK反编译后可能产生数万行代码,人工阅读这些代码就像大海捞针。我曾经分析…...
OpenClaw人人养虾:仪表盘(Dashboard)
Gateway 仪表盘是默认在 / 路径提供的浏览器 Control UI(可通过 gateway.controlUi.basePath 覆盖)。 快速打开(本地 Gateway): http://127.0.0.1:18789/(或 http://localhost:18789/) 关键参…...
如何快速上手p5.js Web Editor:免费在线创意编程的终极指南
如何快速上手p5.js Web Editor:免费在线创意编程的终极指南 【免费下载链接】p5.js-web-editor The p5.js Editor is a website for creating p5.js sketches, with a focus on making coding accessible and inclusive for artists, designers, educators, beginne…...
深入解析ABB AC500与西门子S7-300的Profibus-DP通讯配置与优化
1. Profibus-DP通讯基础与硬件准备 在工业自动化领域,不同品牌PLC之间的通讯一直是工程师们需要面对的挑战。ABB AC500和西门子S7-300作为两大主流控制器,通过Profibus-DP实现数据交换是常见需求。Profibus-DP采用主从架构,最高传输速率可达1…...
如何快速搭建个人飞行监控系统:完整ADS-B信号解码实战指南
如何快速搭建个人飞行监控系统:完整ADS-B信号解码实战指南 【免费下载链接】dump1090 Dump1090 is a simple Mode S decoder for RTLSDR devices 项目地址: https://gitcode.com/gh_mirrors/dump/dump1090 想要实时追踪头顶飞过的航班吗?梦想拥有…...
从ELK自建到拥抱SLS:我们团队如何省下60%的运维成本并实现秒级告警
从ELK自建到拥抱SLS:我们团队如何省下60%的运维成本并实现秒级告警 当我们的微服务集群规模突破200个节点时,凌晨三点被Elasticsearch集群告警电话吵醒已成常态。JVM老年代GC停顿导致查询延迟飙升、Shard分配不均引发的热点节点、冷数据归档策略失效造成…...
Keil4与Win10兼容性全攻略:解决管理员模式运行报错问题
Keil4与Win10兼容性全攻略:解决管理员模式运行报错问题 当你在Windows 10或11上双击Keil4图标时,那个熟悉的报错对话框是否让你感到沮丧?作为仍在维护老旧嵌入式项目的工程师,我们常常陷入两难:既需要稳定运行传统开发…...
语音信号处理中的频谱特征:幅度谱、相位谱、能量谱的区别与应用场景
语音信号处理中的频谱特征:幅度谱、相位谱、能量谱的区别与应用场景 在语音信号处理领域,频谱分析是理解声音本质的核心工具。当我们面对一段录音时,时域波形只能告诉我们声音的振幅随时间变化的情况,而频域分析则揭示了声音的&qu…...
