uoj#186 【UR #13】Yist
orz myy
首先注意到答案有单调性,于是我们可以考虑二分一个\(x\),之后去判断一下每次只使用长度为\(x\)的区间能否删出目标序列
显然我们应该贪心地删除需要删除元素中最小的那一个,感性理解就是先删除最小的能使得接下来删除的限制尽量小
复杂度是\(O(qn^2\log n)\)
再大致理解一下发现我们并不需要二分,对于一个需要删除的元素,需要用到的最大区间长度是可以算出来的;我们搞一个单调栈,处理出每一个需要删除的元素左右两边第一个比它小的不需要删除的\(l_i,r_i\),再减去\((l_i,r_i)\)这个开区间里需要删除的且比\(a_i\)小的元素就是可能的最大区间长度了(根据上面的贪心,这些元素之前就被删除了),答案即所有可能最大区间长度的最小值
由于我们不能将需要删除的元素加入单调栈,所以必须在单调栈上二分求出\(l_i,r_i\),复杂度是\(O(qn\log n)\)
之后还要减掉\((l_i,r_i)\)里需要删除且比\(a_i\)小的元素个数,看起来不是很好处理,但我们只需要减掉\((l_i,r_i)\)里需要删除的元素个数即可,由于我们求得是最小值,这样并不会影响答案
考虑\((l_i,r_i)\)里一个比\(a_i\)大的需要删除元素,这个元素形成的区间一定比\(a_i\)短,能形成的最小值一定比\(a_i\)形成的小
代码
#include<bits/stdc++.h>
#define re register
#define LL long long
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=1e6+5;
int n,Q,top,cnt;
int st[maxn],a[maxn],l[maxn],r[maxn],pre[maxn];
char S[maxn];
inline int find(int x) {
int L=1,R=top,nw=0;
while(L<=R) {
int mid=L+R>>1;
if(a[st[mid]]<x) nw=st[mid],L=mid+1;else R=mid-1;
}
return nw;
}
int main() {
n=read();a[0]=a[n+1]=-1;
for(re int i=1;i<=n;i++) a[i]=read();
Q=read();
while(Q--) {
scanf("%s",S+1);st[top=1]=0;cnt=0;
for(re int i=1;i<=n;i++)
if(S[i]=='1') {
while(top&&a[st[top]]>a[i]) --top;
st[++top]=i;
}
else l[i]=find(a[i])+1;
st[top=1]=n+1;
for(re int i=n;i;--i)
if(S[i]=='1') {
while(top&&a[st[top]]>a[i]) --top;
st[++top]=i;
}
else r[i]=find(a[i])-1,++cnt;
for(re int i=1;i<=n;i++) pre[i]=pre[i-1]+(S[i]=='0');
int ans=n;
for(re int i=1;i<=n;i++) if(S[i]=='0')
ans=min(ans,r[i]-l[i]+1-pre[r[i]]+pre[l[i]-1]);
printf("%d\n",ans+1);
}
return 0;
}
uoj#186 【UR #13】Yist的更多相关文章
- uoj#187. 【UR #13】Ernd
http://uoj.ac/problem/187 每个点只能从时间,b+a,b-a三维都不大于它的点转移过来,将点按时间分成尽量少的一些段,每段内三维同时非严格单调,每段内的点可能因为连续选一段而产 ...
- UOJ 188 【UR #13】Sanrd——min_25筛
题目:http://uoj.ac/problem/188 令 \( s(n,j)=\sum\limits_{i=1}^{n}[min_i>=p_j]f(j) \) ,其中 \( min_i \) ...
- 【UR #13】Yist
UOJ小清新题表 题目摘要 UOJ链接 给出一个排列 \(A\) 以及它的一个非空子序列 \(B\),给出一个 \(x\) 并进行若干次操作,每一次操作需要在 \(A\) 中选择一个长度恰好为 \(x ...
- uoj#188. 【UR #13】Sanrd(Min_25筛)
题面 传送门 题解 这是一道语文题 不难看出,题目所求即为\(l\)到\(r\)中每个数的次大质因子 我们考虑\(Min\_25\)筛的过程,设 \[S(n,j)=\sum_{i=1}^nsec_p( ...
- 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」
题目 不是很能看懂题意,其实就是求\([l,r]\)区间内所有数的次大质因子的和 这可真是看起来有点鬼畜啊 这显然不是一个积性函数啊,不要考虑什么特殊的函数了 我们考虑Min_25筛的过程 设\(S( ...
- UOJ 241. 【UR #16】破坏发射台 [矩阵乘法]
UOJ 241. [UR #16]破坏发射台 题意:长度为 n 的环,每个点染色,有 m 种颜色,要求相邻相对不能同色,求方案数.(定义两个点相对为去掉这两个点后环能被分成相同大小的两段) 只想到一个 ...
- uoj #118. 【UR #8】赴京赶考 水题
#118. [UR #8]赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description ...
- uoj #31. 【UR #2】猪猪侠再战括号序列 贪心
#31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...
随机推荐
- SCAU大二上Java综合性实验
一.题目要求 实验内容: 1. 已经提供的原始数据:班级成绩单文件 该文件为文本文件,存储某个班的所有学生某门课程的成绩. 例如:2012级计算机科学与技术8班-面向对象程序设计.txt 文件中每行存 ...
- java并发编程之美-阅读记录7
java并发包中的并发队列 7.1ConcurrentLinkedQueue 线程安全的无界非阻塞队列(非阻塞队列使用CAS非阻塞算法实现),其底层数组使用单向列表实现,对于出队和入队操作使用CAS非 ...
- tomcat在cmd中部署到系统服务
基本步骤: 1.首先把整个tomcat拷贝到安装路径 2.打开cmd,设置JAVA_HOME,设置的值是对应cmd的局部变量 set JAVA_HOME=E:\tmp\2016\bghc\jdk1.7 ...
- 基于QRcode的带有文字+图片的二维码的Vue组件
1 <template> 2 <!-- 生成二维码开放接口: 3 二维码内容[通常为url] 4 二维码大小[限制为正方形] 二维码下方显示:文字 5 二维码中间显示:图片--> ...
- 获得本机物理ip地址mac
https://blog.csdn.net/guang670248515/article/details/81040797 文章来源:https://blog.csdn.net/kingepoch/a ...
- php7类型约束的意义
在PHP7之前,函数和类方法不需要声明变量类型,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格. 为了解决这个问题,PHP7引入了类型声明. 目前有两类变量可以声明 ...
- cookieUtils.js
cookieUtils.js export default { data () { return { } }, created () { }, methods: { arrayContain (arr ...
- 【leetcode】984. String Without AAA or BBB
题目如下: Given two integers A and B, return any string S such that: S has length A + B and contains exa ...
- POJ 2387 Til the Cows Come Home (dijkstra模板题)
Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...
- 使用nexus3.10搭建maven私有仓库
使用nexus3.10搭建maven私有仓库-----详见如下链接-- --此贴用于笔记 https://blog.csdn.net/vipbupafeng/article/details/80232 ...