第一次打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相关推荐

  1. UOJ #188. 【UR #13】Sanrd

    Description 给定 \(\sum_{i=l}^r f[i]\) \(f[i]=\) 把 \(i\) 的每一个质因子都从小到大排列成一个序列(\(p_i^{c_i}\)要出现 \(c_i\) ...

  2. uoj#188. 【UR #13】Sanrd(Min_25筛)

    题面 传送门 题解 这是一道语文题 不难看出,题目所求即为\(l\)到\(r\)中每个数的次大质因子 我们考虑\(Min\_25\)筛的过程,设 \[S(n,j)=\sum_{i=1}^nsec_p( ...

  3. Min_25筛有关求解次小质因子

    #188. [UR #13]Sanrd 题意化简就是求次小质因子,这一步我们可以在Min_25筛的ans计算中得到, S(n, j)表示的是最小质因子大于等于primejprime_jprimej​的 ...

  4. 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 ...

  5. mahout安装测试

    Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序.Apa ...

  6. #22. 【UR #1】外星人

    #22. [UR #1]外星人 2044年,Picks建成了人类第一台基于量子理论的银河系信息传递机. Picks游遍了宇宙,雇用了 nn 个外星人来帮他作为信息传递机的中转站.我们将外星人依次编号为 ...

  7. UR机器人返回信息格式解析

    1 概述 UR机器人提供了多种端口,用于控制和读取机器人信息,本人整理了相关信息,见文章<UR机器人通信端口和协议>. 本人使用了30003端口来向机器人发送URScript脚本控制命令, ...

  8. UR机器人C语言和Python编程控制

    UR机器人编程控制 一.通过 TCP/IP 进行远程控制 二.UR机器人通信端口类型 2.1.Modbus TCP端口(502端口) 2.2.C语言上位机编程端口(30001/30002/30003端 ...

  9. Python2.7.13 初识

    该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动! 2018-05-07--2018-05-28 参考内容<Python tutorial 2.7.13> 实践源码 ...

最新文章

  1. 快速多尺度人脸检测2--Multi-Scale Fully Convolutional Network for Face Detection in the Wild
  2. java面试-深入理解JVM(一)——JVM内存模型
  3. Spring(3.2.3) - Beans(11): depends-on
  4. PropertySource和ConfigurationProperties
  5. windows绕开强制更新
  6. nacl溶解度_运用溶解度曲线判断混合物分离、提纯的方法
  7. 毕设中涉及层次分析法的EXCEL处理步骤
  8. linux入门常用命令
  9. 计算机网络综合布线的发展史,浅析计算机网络综合布线系统设计
  10. 联众打码平台接口调用(初版)
  11. win7便签怎么一直在桌面显示
  12. Qt 自定义QWidget中区分鼠标单击和双击
  13. 谷歌-安卓系统使用必读,什么是root, Recovery, Radio, APP TO SD, Rom
  14. 【Centos7】配置网卡之添加vlan tag(vlan 标签)
  15. 计算机功能转动怎么设定,怎么旋转电脑屏幕
  16. css 实现一个尖角_css3如何做尖角标签效果?
  17. 理清offsetparent()、offsetLeft/offsetTop、offset()、position()
  18. c语言用户自定义类型,c语言用户自定义数据类型.ppt
  19. Python 字典Dictionary详解
  20. 光流文件(.flo)转图片(.png)

热门文章

  1. 模拟电路技术之基础知识(四)
  2. CTFshow 信息收集 web19
  3. [YTU]_2475( C++习题 多重继承)
  4. 重根迭代法解方程(两种方法)(Python实现)
  5. 台式计算机风扇一直响,风扇一直响的原因是什么? 处理方法
  6. 第十六讲 傅里叶级数拓展
  7. 【ECSHOP】格式化商品价格
  8. PageRank算法--从原理到实现
  9. 远程连接linux服务器mysql
  10. 贪吃蛇原型实现基本思路