3956: Count

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 173  Solved: 99
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

3 2 0
2 1 2
1 1
1 3

Sample Output

0
3

HINT

M,N<=3*10^5,Ai<=10^9

Source

CH Round#64 MFOI杯水题欢乐赛day1 By Gromah

Solution

思路有了之后,比较好写的一道题

首先我们计算以每个点为区间左端的答案,以及区间右端的答案,利用单调栈可以$O(N)$的处理出来

同样可以预处理出它们的前缀和

然后我们考虑一次询问,假如我们得到$[l,r]$中的最大值位置mp

那么我们的答案,相当于是询问区间$[l,mp]$中所有点作为左端的答案与$[mp+1,r]$中所有点作为右端点的答案

那么显然前缀和计算就好,至于查询最大位置?线段树/ST表都可以处理

这里采用ST表,总复杂度是$O(NlogN+M)$

Code

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. using namespace std;
  6. inline int read()
  7. {
  8. int x=,f=; char ch=getchar();
  9. while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
  10. while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
  11. return x*f;
  12. }
  13. #define MAXN 300010
  14. int N,M,T,h[MAXN]; long long last;
  15. inline int GetL (int x,int y) {if (T) return min((x+last-)%N,(y+last-)%N)+; else return min(x,y);}
  16. inline int GetR (int x,int y) {if (T) return max((x+last-)%N,(y+last-)%N)+; else return max(x,y);}
  17. int log2[MAXN],dp[MAXN][];
  18. inline int MaxPos(int x,int y) {return h[x]>h[y]? x:y;}
  19. void ST()
  20. {
  21. log2[]=-;
  22. for (int i=; i<=N; i++)
  23. if (i&(i-)) log2[i]=log2[i-];
  24. else log2[i]=log2[i-]+;
  25. for (int i=; i<=N; i++) dp[i][]=i;
  26. for (int j=; (<<j)<=N; j++)
  27. for (int i=; i+(<<j)-<=N; i++)
  28. dp[i][j]=MaxPos(dp[i][j-],dp[i+(<<(j-))][j-]);
  29. }
  30. inline int RMQ(int l,int r)
  31. {
  32. int tmp=log2[r-l+];
  33. return MaxPos(dp[l][tmp],dp[r-(<<tmp)+][tmp]);
  34. }
  35. long long AnsL[MAXN],AnsR[MAXN];
  36. int stack[MAXN],top;
  37. void PreWork()
  38. {
  39. top=;
  40. stack[++top]=h[];
  41. for (int i=; i<=N; i++)
  42. {
  43. while (top && h[i]>stack[top]) AnsL[i]++,top--;
  44. if (top) AnsL[i]++;
  45. while (top && h[i]>=stack[top]) top--;
  46. stack[++top]=h[i];
  47. }
  48. top=;
  49. stack[++top]=h[N];
  50. for (int i=N-; i>=; i--)
  51. {
  52. while (top && h[i]>stack[top]) AnsR[i]++,top--;
  53. if (top) AnsR[i]++;
  54. while (top && h[i]>=stack[top]) top--;
  55. stack[++top]=h[i];
  56. }
  57. for (int i=; i<=N; i++) AnsL[i]+=AnsL[i-],AnsR[i]+=AnsR[i-];
  58. ST();
  59. }
  60. inline void Solve(int L,int R)
  61. {
  62. int maxp=RMQ(L,R);
  63. printf("%lld\n",last=AnsR[maxp-]-AnsR[L-]+AnsL[R]-AnsL[maxp]);
  64. }
  65. int main()
  66. {
  67. N=read(),M=read(),T=read();
  68. for (int i=; i<=N; i++) h[i]=read();
  69. PreWork();
  70. while (M--)
  71. {
  72. int x=read(),y=read();
  73. int L=GetL(x,y),R=GetR(x,y);
  74. Solve(L,R);
  75. }
  76. return ;
  77. }

【BZOJ-3956】Count ST表 + 单调栈的更多相关文章

  1. [多校联考2019(Round 4 T2)][51nod 1288]汽油补给(ST表+单调栈)

    [51nod 1288]汽油补给(ST表+单调栈) 题面 有(N+1)个城市,0是起点N是终点,开车从0 -> 1 - > 2...... -> N,车每走1个单位距离消耗1个单位的 ...

  2. 【题解】 bzoj3956: Count (ST表+单调栈)

    题面 Solution 看了一点点题解,自己又刚了\(2h30min\),刚了出来qwq,我好菜啊qwq 貌似这道题是BZOJ 4826的弱化,弱化都不会qwq凉凉 Solution 首先你可以考虑, ...

  3. BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]

    4453: cys就是要拿英魂! Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 90  Solved: 46[Submit][Status][Discu ...

  4. BZOJ4540 [Hnoi2016]序列 【莫队 + ST表 + 单调栈】

    题目 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- 1,ar.若1≤l≤s≤t≤r≤n,则称a[s:t]是a[ ...

  5. 【BZOJ3611】[Heoi2014]大工程 欧拉序+ST表+单调栈

    [BZOJ3611][Heoi2014]大工程 Description 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道.  我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶 ...

  6. bzoj千题计划313:bzoj3879: SvT(后缀数组+st表+单调栈)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3879 把所有的后缀取出,按rank排序 求出相邻两个后缀的lcp 每个后缀对答案的贡献就是 与在它 ...

  7. bzoj千题计划314:bzoj3238: [Ahoi2013]差异(后缀数组+st表+单调栈)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3238 跟 bzoj3879 差不多 #include<cstdio> #include ...

  8. Codeforces Round #278 (Div. 1) B - Strip dp+st表+单调队列

    B - Strip 思路:简单dp,用st表+单调队列维护一下. #include<bits/stdc++.h> #define LL long long #define fi first ...

  9. BZOJ 3956: Count 主席树 可持久化线段树 单调栈

    https://www.lydsy.com/JudgeOnline/problem.php?id=3956 从描述可以得到性质: 每个好点对 ( 除了差值为1的好点对 ) 中间的数 ( i , j ) ...

随机推荐

  1. 004商城项目:ssm框架的整合之后的调试

    我们来做一个测试应用,去数据库中输入item表的id然后找到里面的信息转换成json显示在页面上. item表如下: 效果: 代码如下: Dao层: 逆向工程自己的的Mapper. Service层: ...

  2. 重构Web Api程序(Api Controller和Entity) 续篇(2)

    一代好的程序,是几经修改与重构出来的.有关此篇Insus.NET对前面所在修改与重构,还是没有觉得很完美简洁.特别对是存在的json文件进行修改或是删除时,我们原先是从文件读取数据,修改或是删除数据, ...

  3. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  4. C# 多重overide

    overide 是覆盖的意思,用在且仅用在虚函数上,虚函数可以是virtual或abstract修饰的,或者是overide修饰的. 文档大概是这么说的. 由此知道,由overide修饰的函数都是虚函 ...

  5. WP7开发 Sqlite数据库的使用 解决Unable open the database

    WP7本身不支持Sqlite数据库,但我们可以添加第三方组件让它支持Sqlite. 首先在项目中添加引用Community.CsharpSqlite.WP.dll,我会放后面让大家下载,我下了有几天了 ...

  6. DOM与CSS样式表

    在前文 <DOM与元素节点内联样式>中我们了解了用 DOM 提供的接口操作元素节点内联样式的方法,今天我们来学习一下如何用 DOM 操作 CSS 样式表. CSS 样式表概况 通过使用 H ...

  7. 年终福利,PHP7+Apache2.4+MySQL5.6 源码编译安装,环境配置,搭建你自己的LAMP环境

    PHP7 都出来了,你还在玩PHP5吗? MySQL5.6 早都出来了,你还在玩MySql5.2吗? Apache2.4 早都出来了,你还在玩Apache2.2吗? 笔者不才,愿意亲自搭建环境,供搭建 ...

  8. Matlab中的向量

    1.             向量的创建 1)直接输入: 行向量:a=[1,2,3,4,5] 列向量:a=[1;2;3;4;5] 2)用“:”生成向量 a=J:K 生成的行向量是a=[J,J+1,…, ...

  9. VBPR: Visual Bayesian Personalized Ranking from Implicit Feedback-AAAI2016 -20160422

    1.Information publication:AAAI2016 2.What 基于BPR模型的改进:在商品喜好偏序对的学习中,将商品图片的视觉信息加入进去,冷启动问题. 3.Dataset Am ...

  10. 【转】java.util.ResourceBundle使用详解

    原文链接:http://lavasoft.blog.51cto.com/62575/184605/ 人家写的太好了,条理清晰,表达准确.   一.认识国际化资源文件   这个类提供软件国际化的捷径.通 ...