UR #13 Yist
第一次打UR,打了一个半小时就弃疗了QAQ
这是我唯一一道考试的时候做出来的题目,其他两道连暴力都懒得写了
很容易发现对于每个要删除的点
我们找到左边第一个比他小的不用删除的点,右边第一个比他小的不用删除的点
中间这段区间就是对于这个点被删除时的极大区间
对于所有的区间我们取min就可以了
对于找到某个点左边第一个比他小的不用删除的点
我是这样考虑的:将数从大到小的进行添加,并用并查集维护不用删除的点
那么之后这个点存在的极大区间显然是这段区间里的1的个数+1
这个算法是O(na)的
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
using namespace std;const int maxn=1000010;
int n,T,ans;
int a[maxn],pos[maxn];
char b[maxn];
int L[maxn],R[maxn];
int sum[maxn];
int ufsL(int x){return L[x]==x?x:L[x]=ufsL(L[x]);}
int ufsR(int x){return R[x]==x?x:R[x]=ufsR(R[x]);}
void read(int &num){num=0;char ch=getchar();while(ch<'!')ch=getchar();while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();
}
void Solve(){for(int i=1;i<=n;++i){if(b[i]=='1')sum[i]=sum[i-1]+1;else sum[i]=sum[i-1];}ans=n;L[0]=0;for(int i=1;i<=n;++i){if(b[i]=='1')L[i]=i;else L[i]=ufsL(i-1);}R[n+1]=n+1;for(int i=n;i>=1;--i){if(b[i]=='1')R[i]=i;else R[i]=ufsR(i+1);}for(int i=n;i>=1;--i){int p=pos[i];if(b[p]=='1'){L[p]=ufsL(p-1);R[p]=ufsR(p+1);}else{int A=ufsL(p);int B=ufsR(p);ans=min(ans,sum[B-1]-sum[A]+1);}}return;
}
int main(){read(n);for(int i=1;i<=n;++i)read(a[i]),pos[a[i]]=i;scanf("%d",&T);while(T--){scanf("%s",b+1);Solve();printf("%d\n",ans);}return 0;
}
题解给出了一种O(n)的做法,还是回顾刚才的思路
我们注意到我们的并查集只有删除操作
也就是说如果一个点扩展的时候访问到之前已经扩展过的点
这个点的区间长度一定比之前扩展的那个点的区间长度要长
由于我们取的是min,所以我们就不用扩展了
这样我们就可以保证每个元素只访问一次,每次暴力扩展即可
时间复杂度显然是O(n)的
转载于:https://www.cnblogs.com/joyouth/p/5381103.html
UR #13 Yist相关推荐
- UOJ #188. 【UR #13】Sanrd
Description 给定 \(\sum_{i=l}^r f[i]\) \(f[i]=\) 把 \(i\) 的每一个质因子都从小到大排列成一个序列(\(p_i^{c_i}\)要出现 \(c_i\) ...
- uoj#188. 【UR #13】Sanrd(Min_25筛)
题面 传送门 题解 这是一道语文题 不难看出,题目所求即为\(l\)到\(r\)中每个数的次大质因子 我们考虑\(Min\_25\)筛的过程,设 \[S(n,j)=\sum_{i=1}^nsec_p( ...
- Min_25筛有关求解次小质因子
#188. [UR #13]Sanrd 题意化简就是求次小质因子,这一步我们可以在Min_25筛的ans计算中得到, S(n, j)表示的是最小质因子大于等于primejprime_jprimej的 ...
- LOJ572. 「LibreOJ Round #11」Misaka Network 与求和 [莫比乌斯反演,杜教筛,min_25筛]
传送门 思路 (以下令\(F(n)=f(n)^k\)) 首先肯定要莫比乌斯反演,那么可以推出: \[ ans=\sum_{T=1}^n \lfloor\frac n T\rfloor^2\sum_{d ...
- mahout安装测试
Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序.Apa ...
- #22. 【UR #1】外星人
#22. [UR #1]外星人 2044年,Picks建成了人类第一台基于量子理论的银河系信息传递机. Picks游遍了宇宙,雇用了 nn 个外星人来帮他作为信息传递机的中转站.我们将外星人依次编号为 ...
- UR机器人返回信息格式解析
1 概述 UR机器人提供了多种端口,用于控制和读取机器人信息,本人整理了相关信息,见文章<UR机器人通信端口和协议>. 本人使用了30003端口来向机器人发送URScript脚本控制命令, ...
- UR机器人C语言和Python编程控制
UR机器人编程控制 一.通过 TCP/IP 进行远程控制 二.UR机器人通信端口类型 2.1.Modbus TCP端口(502端口) 2.2.C语言上位机编程端口(30001/30002/30003端 ...
- Python2.7.13 初识
该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动! 2018-05-07--2018-05-28 参考内容<Python tutorial 2.7.13> 实践源码 ...
最新文章
- 快速多尺度人脸检测2--Multi-Scale Fully Convolutional Network for Face Detection in the Wild
- java面试-深入理解JVM(一)——JVM内存模型
- Spring(3.2.3) - Beans(11): depends-on
- PropertySource和ConfigurationProperties
- windows绕开强制更新
- nacl溶解度_运用溶解度曲线判断混合物分离、提纯的方法
- 毕设中涉及层次分析法的EXCEL处理步骤
- linux入门常用命令
- 计算机网络综合布线的发展史,浅析计算机网络综合布线系统设计
- 联众打码平台接口调用(初版)
- win7便签怎么一直在桌面显示
- Qt 自定义QWidget中区分鼠标单击和双击
- 谷歌-安卓系统使用必读,什么是root, Recovery, Radio, APP TO SD, Rom
- 【Centos7】配置网卡之添加vlan tag(vlan 标签)
- 计算机功能转动怎么设定,怎么旋转电脑屏幕
- css 实现一个尖角_css3如何做尖角标签效果?
- 理清offsetparent()、offsetLeft/offsetTop、offset()、position()
- c语言用户自定义类型,c语言用户自定义数据类型.ppt
- Python 字典Dictionary详解
- 光流文件(.flo)转图片(.png)