题目

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\)形成的小

代码

  1. #include<bits/stdc++.h>
  2. #define re register
  3. #define LL long long
  4. #define min(a,b) ((a)<(b)?(a):(b))
  5. #define max(a,b) ((a)>(b)?(a):(b))
  6. inline int read() {
  7. char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
  8. while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
  9. }
  10. const int maxn=1e6+5;
  11. int n,Q,top,cnt;
  12. int st[maxn],a[maxn],l[maxn],r[maxn],pre[maxn];
  13. char S[maxn];
  14. inline int find(int x) {
  15. int L=1,R=top,nw=0;
  16. while(L<=R) {
  17. int mid=L+R>>1;
  18. if(a[st[mid]]<x) nw=st[mid],L=mid+1;else R=mid-1;
  19. }
  20. return nw;
  21. }
  22. int main() {
  23. n=read();a[0]=a[n+1]=-1;
  24. for(re int i=1;i<=n;i++) a[i]=read();
  25. Q=read();
  26. while(Q--) {
  27. scanf("%s",S+1);st[top=1]=0;cnt=0;
  28. for(re int i=1;i<=n;i++)
  29. if(S[i]=='1') {
  30. while(top&&a[st[top]]>a[i]) --top;
  31. st[++top]=i;
  32. }
  33. else l[i]=find(a[i])+1;
  34. st[top=1]=n+1;
  35. for(re int i=n;i;--i)
  36. if(S[i]=='1') {
  37. while(top&&a[st[top]]>a[i]) --top;
  38. st[++top]=i;
  39. }
  40. else r[i]=find(a[i])-1,++cnt;
  41. for(re int i=1;i<=n;i++) pre[i]=pre[i-1]+(S[i]=='0');
  42. int ans=n;
  43. for(re int i=1;i<=n;i++) if(S[i]=='0')
  44. ans=min(ans,r[i]-l[i]+1-pre[r[i]]+pre[l[i]-1]);
  45. printf("%d\n",ans+1);
  46. }
  47. return 0;
  48. }

uoj#186 【UR #13】Yist的更多相关文章

  1. uoj#187. 【UR #13】Ernd

    http://uoj.ac/problem/187 每个点只能从时间,b+a,b-a三维都不大于它的点转移过来,将点按时间分成尽量少的一些段,每段内三维同时非严格单调,每段内的点可能因为连续选一段而产 ...

  2. 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 \) ...

  3. 【UR #13】Yist

    UOJ小清新题表 题目摘要 UOJ链接 给出一个排列 \(A\) 以及它的一个非空子序列 \(B\),给出一个 \(x\) 并进行若干次操作,每一次操作需要在 \(A\) 中选择一个长度恰好为 \(x ...

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

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

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

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

  6. 「uoj#188. 【UR #13】Sanrd」

    题目 不是很能看懂题意,其实就是求\([l,r]\)区间内所有数的次大质因子的和 这可真是看起来有点鬼畜啊 这显然不是一个积性函数啊,不要考虑什么特殊的函数了 我们考虑Min_25筛的过程 设\(S( ...

  7. UOJ 241. 【UR #16】破坏发射台 [矩阵乘法]

    UOJ 241. [UR #16]破坏发射台 题意:长度为 n 的环,每个点染色,有 m 种颜色,要求相邻相对不能同色,求方案数.(定义两个点相对为去掉这两个点后环能被分成相同大小的两段) 只想到一个 ...

  8. uoj #118. 【UR #8】赴京赶考 水题

    #118. [UR #8]赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description ...

  9. uoj #31. 【UR #2】猪猪侠再战括号序列 贪心

    #31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...

随机推荐

  1. dell iDRAC7配置远程访问管理

    一.启动Dell服务器,按F2 System Setup,打开BIOS界面,选择iDRAC Settings 二.在IDRAC Settings界面中选择Network 三.在Network界面中 E ...

  2. Dev常用控件

    GridControl TreeView DEV GridControl小结.. https://blog.csdn.net/happy09li/article/details/7186829 Dev ...

  3. [web设计]带有方向感应的hover effect

    See the Pen bdxLQa by jeremylee (@lijie33402) on CodePen. codepen不知道怎么嵌入到cnblogs..待编辑 参考资料 参考博客

  4. Tomcat8.0源码编译

    最近打算开始研究一下Tomcat的工作原理,拜读一下源码.所以先从编译源码开始了.尽管网上有那么多的资料,但是总是觉得,自己研究一遍,写一遍,在动手做一遍能够让我们更加深入的了解.现在整个社会都流行着 ...

  5. JDBC中如何进行事务处理?

    Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务:当事务完成后用commit()显式提交事务:如果在事务处理过程中发生异常则通过rollb ...

  6. XML 和 HTML 之间的差异

    XML 和 HTML 为不同的目的而设计: XML 被设计用来传输和存储数据,其焦点是数据的内容. HTML 被设计用来显示数据,其焦点是数据的外观. HTML 旨在显示信息,而 XML 旨在存储和传 ...

  7. WaitForSingleObject的作用[转]

    在多线程的情况下,有时候我们会希望等待某一线程完成了再继续做其他事情(比如主线程等待子线程结束完之后,自己再结束),要实现这个目的,可以使用Windows API函数WaitForSingleObje ...

  8. css3 实现可以中英切换的导航条

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  9. 【纪中集训】2019.08.02【NOIP提高组】模拟 A 组TJ

    \(\newcommand{\RNum}[1]{\uppercase\expandafter{\romannumeral #1\relax}}\) T1 一道可以暴力撵标算的题-- Descripti ...

  10. 饿了么监控系统 EMonitor 与美团点评 CAT 的对比

    背景介绍 饿了么监控系统EMonitor:是一款服务于饿了么所有技术部门的一站式监控系统,覆盖了系统监控.容器监控.网络监控.中间件监控.业务监控.接入层监控以及前端监控的数据存储与查询.每日处理总数 ...