Time:2016.08.11
Author:xiaoyimi
转载注明出处谢谢


传送门
思路:
TA爷眼中的水题
首先有个特别的结论
总共的点对数不会超过2n
因为对于元素i来说,如果只考虑与比它高的元素进行配对
那么最多左边一个,右边一个,再靠左或靠右的就不满足配对条件了
考试的时候我想到的是单调栈维护一个不上升的序列,但不知道具体并不会做
讲题时使用了ST表维护区间最大
(为什么不用线段树?因为线段树常数比较大……而且这里是静态查询,正好是RMQ经典操作)
考虑区间[l,r]
找出[l,r]中最大高度的下标k
显然l~k-1不能和k之后的元素配对
k+1~r不能和k之前的元素配对
ans=[l,k]在[l,k]中的配对个数+[k,r]在[k,r]中的配对个数
这个是可以前缀和维护的
前后各扫一遍
f[i]指i在[1,i]中配对数量
g[i]指i在[i,n]中配对数量
sum1[i]=Σf[j] 1<=j<=i
sum2[i]=Σg[j] i<=j<=n
ans=sum1[r]-sum1[k]+sum[l]-sum2[k]
注意高度相等时的处理,这里很恶心,我就不细说了ORZ

#include<cstdio>
#include<iostream>
#include<cmath>
#define M 300003
#define pd(x,y) (a[x]>a[y]?x:y)
using namespace std;
int in()
{int t=0;char ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9') t=(t<<1)+(t<<3)+ch-48,ch=getchar();return t;
}
int n=in(),m=in(),tp=in();
int sum1[M],sum2[M],S[M];
int a[M],fa[M][19];
int RMQ(int x,int y)
{int t=log2(y-x+1);return pd(fa[x][t],fa[y-(1<<t)+1][t]);
}
main()
{for (int i=1;i<=n;i++) a[i]=in();for (int i=1;i<=n;i++){for (;S[0];S[0]--){sum1[i]++;if (a[S[S[0]]]>=a[i]) break;}for (;S[0];S[0]--)if (a[S[S[0]]]>a[i]) break;S[++S[0]]=i;sum1[i]+=sum1[i-1];}S[0]=0;for (int i=n;i>=1;i--){for (;S[0];S[0]--){sum2[i]++;if (a[S[S[0]]]>=a[i]) break;}for (;S[0];S[0]--)if (a[S[S[0]]]>a[i]) break;S[++S[0]]=i;sum2[i]+=sum2[i+1];}for (int i=1;i<=n;i++) fa[i][0]=i;for (int i=1;(1<<i)<=n;i++)for (int j=1;j+(1<<i)-1<=n;j++)fa[j][i]=pd(fa[j][i-1],fa[j+(1<<i-1)][i-1]);int mx,l,r,L,R,lastans=0;for (;m;m--){l=in();r=in();if (tp)L=min((lastans+l-1)%n,(lastans+r-1)%n)+1,R=max((l+lastans-1)%n,(r+lastans-1)%n)+1;else L=l,R=r;mx=RMQ(L,R);printf("%d\n",lastans=sum1[R]-sum1[mx]-sum2[mx]+sum2[L]);}
}

其实也可以写主席树的,但我被相等情况的处理恶心到了,所以没有写下去……

【BZOJ3956】Count,单调栈+ST表维护区间最大值相关推荐

  1. 【BZOJ】3956 Count 单调栈+ST表

    题目传送门 挺有思想的一题,但如果弄清楚了思路这题还是挺简单的. 首先我们可以发挥一下自己的脑洞,发现所有的好集对不可能相交. 那么我们可以刷两遍单调栈,求出每个点作为区间左端点或右端点的次数. 对于 ...

  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. 【牛客 - 371牛客OI周赛7-提高组B】小睿睿的询问(RMQ,ST表维护下标)

    题干: 链接:https://ac.nowcoder.com/acm/contest/371/B 来源:牛客网 小睿睿的n个妹纸排成一排,每个妹纸有一个颜值val[i].有m个询问,对于每一个询问,小 ...

  6. 线段树维护区间最大值+第 45 届(ICPC)亚洲区域赛(昆明)L题Simone and Graph Coloring

    题意: 给你n个数的序列,当满足i<ji<ji<j andandand ai>aja_i>a_jai​>aj​时,这两个点之间有一条边,现在对点染色,要求每个点相邻 ...

  7. 2019牛客暑期多校训练营(第一场场)_I题Points Division(线段树+DP维护区间最大值)

    题目链接: https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点的坐标为(xi,yi),有两个权值ai,bi. 现在要你将它分成A,B两部分, ...

  8. Marvolo Gaunt's Ring CodeForces - 855B+线段树+维护区间最大值和最小值

    题目链接: Marvolo Gaunt's Ring CodeForces - 855B 题目大意: 给定一段序列:a1,a2,a3,--an, 给定三个数:p,q,r(注意数据范围,代码里ans=- ...

  9. Codeforces 359D Pair of Numbers | 二分+ST表+gcd

    题面: 给一个序列,求最长的合法区间,合法被定义为这个序列的gcd=区间最小值 输出最长合法区间个数,r-l长度 接下来输出每个合法区间的左端点 题解: 由于区间gcd满足单调性,所以我们可以二分区间 ...

最新文章

  1. mysql-cluster 安装配置
  2. android串口补位,Rust多线程中的消息传递机制
  3. php变量与数组相互转换的方法(extract与compact
  4. lseek函数的使用
  5. java jsp ajax_ajax的json传值方式在jsp页面中的应用
  6. Linux下coredump调试2:实例
  7. 获取指定路径下所有PDF文件的总页数
  8. 获取当前jvm的进程号
  9. 3D程序运行在服务器上 VirtualGL
  10. PHP把商品详情数据加入到商品数据,如果商品有多个详情只展示一次商品数据
  11. Windows7 的激活命令小结
  12. rescale matlab,frft_matlab integrated algorithm about Frft, matla - CodeBus
  13. Python之(scikit-learn)机器学习
  14. VUE中动态改变字体大小
  15. Android 蓝牙
  16. Entry name ‘assets/iflytek/recognize.xml‘ collided
  17. 自称中本聪的他被法官怒怼:你的证词毫无可信度!
  18. was英文读音_was't是什么意思
  19. 自动控制原理复习——第一章绪论
  20. cydia服务器未响应,cydia错误常见问题解决办法汇总

热门文章

  1. 多元算力加持,华为云鲲鹏大数据服务公测上线
  2. ProjectMan是这样炼成的
  3. android修改自动背光,Android LCD和键盘 背光亮度设置
  4. 《JavaScript高级程序设计》红宝书第一遍阅读(了解概念)
  5. 学习笔记 - Linux学习笔记 第四讲 Linux常用命令
  6. Android笔记 fragment的生命周期
  7. A-Deeper-Understanding-of-Spark-Internals(Spark内核深入理解)
  8. 华为交换机默认vlan都是通的吗_华为设备二层交换技术——Hybrid接口详解
  9. JAVA服务器没回应_Java Socket为什么服务器无法回复客户端
  10. Python刷题-4