bzoj 3956: Count
3956: Count
Description
Input
Output
Sample Input
2 1 2
1 1
1 3
Sample Output
3
HINT
M,N<=3*10^5,Ai<=10^9
Source
CH Round#64 MFOI杯水题欢乐赛day1 By Gromah
题解:
性质很妙的一道题。
首先可以发现这个所有的点队数是很小的,考虑以把一个点作为两个端点中较小的一个,那么另一个端点肯定是向左向右第一个大于等于它的点,这是很显然的。。。。
我们可以先用单调栈把这些点对都预处理出来。
再考虑如何求区间[L,R]内的答案。
设x为[L,R]中最大值的位置。
显然某个端点在区间内的点对是不可能跨越这个点的。
然后就可以前缀和计算答案了。。
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
const int N=300005;
struct node
{
int a,b;
}p[N<<1];
int n,m,T,i,j,x,y,ans,l,r,k,cnt,a[N],g[N],L[N],R[N],Log[N],f[N][25],F[N][25];
inline int Max(int l,int r)
{
int x=Log[r-l+1];
if(f[l][x]>f[r-(1<<x)+1][x]) return F[l][x];else return F[r-(1<<x)+1][x];
}
inline void read(int&v)
{
char c=getchar();v=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') v=v*10+c-'0',c=getchar();
}
int main()
{
scanf("%d%d%d",&n,&m,&T);
for(i=1;i<=n;i++) Log[i]=log2(i);
for(i=1;i<=n;i++) scanf("%d",&a[i]),f[i][0]=a[i],F[i][0]=i;
for(j=1;(1<<j)<=n;j++)
for(i=1;i+(1<<j)-1<=n;i++)
if(f[i][j-1]>f[i+(1<<j-1)][j-1])
{
f[i][j]=f[i][j-1];
F[i][j]=F[i][j-1];
} else
{
f[i][j]=f[i+(1<<j-1)][j-1];
F[i][j]=F[i+(1<<j-1)][j-1];
}
for(i=1;i<=n;i++)
{
while(k>0&&a[i]>a[g[k]]) k--;
if(g[k]>0)
{
p[++cnt].a=g[k];
p[cnt].b=i;
}
g[++k]=i;
}
k=0;
for(i=n;i>=1;i--)
{
while(k>0&&a[i]>a[g[k]]) k--;
if(g[k]>0&&a[i]!=a[g[k]])
{
p[++cnt].a=i;
p[cnt].b=g[k];
}
g[++k]=i;
}
for(i=1;i<=cnt;i++) L[p[i].a]++,R[p[i].b]++;
for(i=1;i<=n;i++) L[i]+=L[i-1],R[i]+=R[i-1];
while(m--)
{
read(x),read(y);
if(T==1) l=(x+ans-1)%n+1,r=(y+ans-1)%n+1;else l=x,r=y;
if(l>r) swap(l,r);
int id=Max(l,r);
ans=L[id-1]-L[l-1]+R[r]-R[id];
printf("%d\n",ans);
}
return 0;
}
bzoj 3956: Count的更多相关文章
- BZOJ 3956: Count 主席树 可持久化线段树 单调栈
https://www.lydsy.com/JudgeOnline/problem.php?id=3956 从描述可以得到性质: 每个好点对 ( 除了差值为1的好点对 ) 中间的数 ( i , j ) ...
- BZOJ 3956 Count 解题报告
好点对的个数是\(O(n)\)的,而且我们可以 \(O(n)\) 地求出所有好点对. 我们把这些点对以右端点为关键字从小到大排序,再弄个扫描线,每次把右端点在扫描线上的点对的左端点加入线段树,于是我们 ...
- bzoj 4664: Count
这道题和bzoj上一道叫魔法碰撞的题很像,只不过做法更加巧妙了. 一开始的想法是$f[i][j][k][0/1/2]$表示后i个数有j段当前混乱程度为k的方案,最后一维表示边界还能放几个. 转移的时候 ...
- bzoj 2588 Count on a tree 解题报告
Count on a tree 题目描述 给定一棵\(N\)个节点的树,每个点有一个权值,对于\(M\)个询问\((u,v,k)\),你需要回答\(u\) \(xor\) \(lastans\)和\( ...
- BZOJ 1833 count 数字计数
sb数位dp. #include<iostream> #include<cstdio> #include<cstring> #include<algorith ...
- BZOJ 1452 Count(二维树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1452 题意:给出一个数字矩阵(矩阵中任何时候的数字均为[1,100]),两种操作:(1) ...
- BZOJ 1452 Count
长知识啦..二维BIT. #include<iostream> #include<cstdio> #include<cstring> #include<alg ...
- BZOJ 2588 Count on a tree (COT) 是持久的段树
标题效果:两棵树之间的首次查询k大点的权利. 思维:树木覆盖树,事实上,它是正常的树木覆盖了持久段树. 由于使用权值段树可以寻求区间k大,然后应用到持久段树思想,间隔可以做减法.详见代码. CODE: ...
- bzoj 2588 Count on a tree
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
随机推荐
- local variables referenced from a Lambda expression must be final or effectively final------理解
前几天使用lamdba时,报了一个这个错,原因是在lamdba体中使用了一个变量,觉得很奇怪! 今天在读这本书的时候,又看到了这个解释,这里有了更深刻的理解,总结一下: 在jdk1.8之前在使用匿名内 ...
- aarch64_l1
L-function-1.23-18.fc26.aarch64.rpm 2017-02-14 08:01 139K fedora Mirroring Project L-function-devel- ...
- mysql状态查看 QPS/TPS/缓存命中率查看【转】
运行中的mysql状态查看 对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态. (1)QPS(每秒Query量) QPS = Questions(or Queries ...
- linux编译警告 will be initialized after
http://blog.chinaunix.net/uid-17019762-id-3152012.html 作为一个有强迫症的人,实在是受不了 warning 的存在 这个warning是由于初始化 ...
- js中图片获取src的正则
链接: JavaScript 正则表达式:http://www.runoob.com/js/js-regexp.html js正则匹配出所有图片及图片地址src的方法:http://www.jb51. ...
- python3中文转码方法
python3中的转码,必须是byte类型的,str类型的会返回未定义方法. 示例代码如下 doc = pq(start_html.content) print("orig text=&qu ...
- tensorflow session 和 graph
graph即tf.Graph(),session即tf.Session(),很多人经常将两者混淆,其实二者完全不是同一个东西. graph定义了计算方式,是一些加减乘除等运算的组合,类似于一个函数.它 ...
- java基础38 正则表达式
1.常用的正则表达式 预定义字符类:. 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S ...
- MySQL学习笔记:字符串前后补全0
遇到一个需求:不足6位的需要自动补全6位,使用函数LPAD()和RPAD()补全. LPAD(str, len, padstr) 用字符串padstr对str进行左边填充补全直至它的长度达到len个字 ...
- java算法小例子
作为一个程序员,有时候我觉得自己都不适合,因为自己数学不好,算法不好,脑子不够灵活.而对于算法,感觉就像是数学题,总觉得很难.以前上学,在班里总有几个什么都不好,但唯独数学很厉害,真气人!面对难题时, ...