题目传送门

挺有思想的一题,但如果弄清楚了思路这题还是挺简单的。

首先我们可以发挥一下自己的脑洞,发现所有的好集对不可能相交。

那么我们可以刷两遍单调栈,求出每个点作为区间左端点或右端点的次数。

对于给定区间,我们先找出区间中最大值所在的位置,显然所有的好集对最多以这个位置为左端点或右端点,不可能包含这个位置。

然后问题就转化成了求一个区间的最大值所在的位置,计算以该位置左侧所有位置为左端点的区间个数加上一该位置右侧所有位置为右端点的区间个数。

(说的好绕啊,望各位大佬用心看看吧)

上面那个东西显然可以用前缀和优化一下,然后这题就A啦。

p.s.是我太菜了吗?看到静态区间查最值就想到了ST表,百度上的各位大佬写的都是什么主席树啊之类的高级数据结构爆艹这题……我只能表示orz了。

附上AC代码:

#include <cstdio>
#include <cctype>
#include <cmath>
#include <algorithm>
using namespace std;const int N=3e5+10;
int n,m,o,a[N],sk[N],top,mx[N][20],k,x,y;
long long l[N],r[N],ans;inline char nc(void){static char ch[100010],*p1=ch,*p2=ch;return p1==p2&&(p2=(p1=ch)+fread(ch,1,100010,stdin),p1==p2)?EOF:*p1++;
}inline void read(int &a){static char c=nc();int f=1;for (;!isdigit(c);c=nc()) if (c=='-') f=-1;for (a=0;isdigit(c);a=(a<<3)+(a<<1)+c-'0',c=nc());return (void)(a*=f);
}inline int get(int x,int y){return a[x]>a[y]?x:y;}int main(void){read(n),read(m),read(o);for (int i=1; i<=n; ++i) read(a[i]),mx[i][0]=i;sk[top=1]=a[1];for (int i=2; i<=n; ++i){while (top&&sk[top]<a[i]) ++r[i],--top;if (top) ++r[i];if (sk[top]!=a[i]) sk[++top]=a[i];}sk[top=1]=a[n];for (int i=n-1; i; --i){while (top&&sk[top]<a[i]) ++l[i],--top;if (top) ++l[i];if (sk[top]!=a[i]) sk[++top]=a[i];}for (int i=1; i<=n; ++i) l[i]+=l[i-1],r[i]+=r[i-1];k=log2(n);for (int j=1; j<=k; ++j)for (int i=1; i+(1<<j)-1<=n; ++i)    mx[i][j]=get(mx[i][j-1],mx[i+(1<<j-1)][j-1]);while (m--){read(x),read(y);if (o) x=(x+ans-1)%n+1,y=(y+ans-1)%n+1;if (x>y) swap(x,y);int p=log2(y-x+1),wz=get(mx[x][p],mx[y-(1<<p)+1][p]);printf("%lld\n",ans=l[wz-1]-l[x-1]+r[y]-r[wz]);}return 0;
}

【BZOJ】3956 Count 单调栈+ST表相关推荐

  1. 【BZOJ3956】Count,单调栈+ST表维护区间最大值

    Time:2016.08.11 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: TA爷眼中的水题 首先有个特别的结论 总共的点对数不会超过2n 因为对于元素i来说,如果只考虑与比它高 ...

  2. P3246 [HNOI2016]序列(莫队+单调栈+ST表)

    [HNOI2016]序列 Tea神题解 Kelin神题解 对于莫队算法最主要的是如何快速算出[l,r]→[l,r+1][l,r]\to[l,r+1][l,r]→[l,r+1]对答案的贡献的变化. 当询 ...

  3. hdu6989 (莫队+单调栈+ST表)

    题意: 求l-r之间所有区间最大值最小值之和的期望,除法按照逆元来求; 题解: 看之前刚补的一道题目,那道题目跟这道题差不多,解释都在下面的链接中. [HNOI2016]序列 就是取余把人取傻了. # ...

  4. POJ1821 单调队列//ST表 优化dp

    http://poj.org/problem?id=1821 当我们在考虑内层循环j以及决策k的时候,我们可以把外层变量i看作定值,以此来优化dp状态转移方程. 题意 有n个工人准备铺m个连续的墙,每 ...

  5. 数据结构算法 | 单调栈

    文章目录 算法概述 题目 下一个更大的元素 I 思路 代码 下一个更大元素 II 思路 代码 132 模式 思路 代码 接雨水 思路 算法概述 当题目出现 「找到最近一个比其大的元素」 的字眼时,自然 ...

  6. leetcode:6080. 使数组按非递减顺序排列【单调栈 + 合并】

    分析 保存一个单调递减的stack,元素是(num, max+t) 遇到大于等于栈顶的,把栈顶的挪出来,然后记录同一次挪出的最大的max_t 如果挪完st还有剩余的话,max_t ++ 然后ans就是 ...

  7. 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]

    题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...

  8. 【HNOI2016】序列【莫队】【单调栈】【ST表】

    题意:给定序列 aia_iai​,qqq 次询问 [l,r][l,r][l,r] 所有子区间最小值之和. n,q≤105n,q\leq 10^5n,q≤105 这种题一眼看上去是离线线段树,但这题每移 ...

  9. P3246 [HNOI2016]序列 莫队 + ST表 + 单调栈

    传送门 文章目录 题意: 思路: Update 题意: 思路: 比较神奇的一个题,这里先介绍莫队的离线解法. 不难发现,用莫队来做最大的难点就是在进行区间移动的时候如何快速计算贡献. 比如[l,r]− ...

最新文章

  1. Debian和CentOS主流系统按包含文件名称搜索软件包
  2. 严谨技术支撑vs奔放客户的100个真实写真
  3. boost::scoped_ptr相关的测试程序
  4. Redis 3.0.501 学习使用(1)
  5. 收费标准_互联网推广收费标准
  6. Spark(十二) -- Spark On Yarn Spark as a Service Spark On Tachyon
  7. 第一小节 初识面向对象
  8. PyTorch 1.0 中文文档:torch.Storage
  9. 这脑洞绝了!中美合拍动画《哪吒与变形金刚》来了
  10. python类的应用_python中文件类的应用
  11. sql for循环_【赵强老师】什么是PL/SQL?
  12. 问题:Warning: Attempt to present UINavigationController whose view is not in the window hierarchy
  13. 在nginx中设置三级域名
  14. 李清照《声声慢》欣赏(转载)
  15. android 多媒体播放器源代码,Android多媒体之VideoView视频播放器
  16. c语言中int转string,C++中int型与string型互相转换
  17. java qo_Java中DAO/DTO/PO/VO/BO/QO/POJO
  18. 代码审查(Code Review)
  19. MacBook安装Windows系统后耗电快的原因在这里
  20. JavaSE基础——(13)StringBuffer类与数组排序

热门文章

  1. spring 笔记持续更新2012年9月16日 11:54:45
  2. cocos2dx学习小结
  3. 手动脱简单的虚拟机壳(themida)
  4. 【线代】线性方程组:非齐次/齐次方解的个数、系数矩阵的秩、未知数个数的关系?为什么 Ax=0 比 Ax=b 少1个线性无关的解?
  5. 解决spa白屏方法之ssr及ssr优化
  6. 如何阻止input的focus事件
  7. linux 强制卸载nfs,linux nfs 卸载
  8. Xsolla与GPay合作,全面开通土耳其市场
  9. 拉取项目pom文件报错,jai_core-1.1.3.jar,解决jar引入问题
  10. eclips安装svn插件方法