这题与之前那道区间最值的题非常类似,依旧是二分区间,然后统计跨过中间点的区间贡献。

我们要选出小于等于和小于的,这样就可以算出相等的区间长了。

复杂度O(nlogn)

By:大奕哥

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans;int n;
const int N=;
void add(ll x){ans+=x;}
int a[][N],p[][],l[][N],r[][N];
void solve(int ll,int rr)
{
if(ll==rr){if(a[][ll]==a[][ll])add();return;}
int mid=ll+rr>>;
solve(ll,mid);solve(mid+,rr);
for(int k=;k<=;++k)
{
l[k][mid]=a[k][mid];for(int i=mid-;i>=ll;--i)l[k][i]=max(l[k][i+],a[k][i]);
r[k][mid]=a[k][mid];for(int i=mid+;i<=rr;++i)r[k][i]=max(r[k][i-],a[k][i]);
}
for(int k=;k<=;++k)for(int i=;i<=;++i)p[k][i]=mid;
for(int i=mid;i>=ll;--i)
{
for(int k=;k<=;++k)
{
while(p[k][]<rr&&r[k][p[k][]+]<=l[k][i])p[k][]++;
while(p[k][]<rr&&r[k][p[k][]+]<l[k^][i])p[k][]++;
while(p[k][]<rr&&r[k][p[k][]+]<=l[k^][i])p[k][]++;
}
if(l[][i]==l[][i])add(max(,min(p[][],p[][])-mid));
else if(l[][i]>l[][i])add(max(,min(p[][],p[][])-p[][]));
else add(max(,min(p[][],p[][])-p[][]));
}
int pos=mid+;
for(int i=mid+;i<=rr;++i)
{
while(pos>ll&&max(l[][pos-],l[][pos-])<max(r[][i],r[][i]))--pos;
if(r[][i]==r[][i])add(max(,mid-pos+));
}
}
int main()
{
scanf("%d",&n);
for(int k=;k<=;++k)
for(int i=;i<=n;++i)
scanf("%d",&a[k][i]);
solve(,n);
printf("%lld\n",ans);
return ;
}

51Nod1962 区间计数的更多相关文章

  1. UVa 1640 The Counting Problem (数学,区间计数)

    题意:给定两个数m, n,求从 m 到 n 中0-9数字各出现了多少次. 析:看起来挺简单的,其实并不好做,因为有容易想乱了.主要思路应该是这样的,分区间计数,先从个位进行计,一步一步的计算过来.都从 ...

  2. 51NOD 1962 区间计数 单调栈+二分 / 线段树+扫描线

     区间计数   基准时间限制:1.5 秒 空间限制:262144 KB 分值: 80   两个数列 {An} , {Bn} ,请求出Ans, Ans定义如下: Ans:=Σni=1Σnj=i[max{ ...

  3. 51NOD 1810 连续区间 分治 区间计数

    1810 连续区间 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80     区间内所有元素排序后,任意相邻两个元素值差为1的区间称为“连续区间” 如:3,1,2是连续区间,但3, ...

  4. 类似区间计数的种类并查集两题--HDU 3038 & POJ 1733

    1.POJ 1733 Parity game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5744   Accepted: ...

  5. 51nod 1962区间计数(单调栈加二分)

    题目要求是求出两个序列中处于相同位置区间并且最大值相同的区间个数,我们最直观的感受就是求出每个区间的最大值,这个可以O(N)的求,利用单调栈求出每个数作为最大值能够覆盖的区间. 然后我们可以在进行单调 ...

  6. POJ 2155 Matrix【二维树状数组+YY(区间计数)】

    题目链接:http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissio ...

  7. POJ 2155 Matrix (树状数组 && 区间计数)

    题意 : 给出一个N*N的矩阵, 矩阵只有可能包含0或1, 一开始则全部是0.对于矩阵可以进行两种操作, 第一种是输入 C x1 y1 x2 y2 表示, 对以(x1, y1)为左上角, 以(x2, ...

  8. 【做题记录】max-min+1=len 区间计数

    (来源:XJ高质量原创题) 原题地址 弱化版:CF526F Pudding Monsters 弱化版 题意:\(n\times n\) 的棋盘上有 \(n\) 颗棋子,每行每列都有且仅有一颗棋子,求出 ...

  9. 51nod 1962 区间计数(单调栈+二分)

    维护两个单调递减的栈,当i加进栈,位置x的数弹出的时候,在另一个栈中找到和这个数一样大的数,计算贡献(x-靠右左端点)*(i-x). #include<iostream> #include ...

随机推荐

  1. 【BZOJ】2406 矩阵

    [算法]二分+有源汇上下界可行流 [题解]上下界 题解参考:[BZOJ2406]矩阵(二分+有源汇有上下界的可行流) #include<cstdio> #include<algori ...

  2. 小程序 mcrypt加密拓展在php7.1 废弃 使用openssl替代方案

    原加密方法 使用mcrypt //获得16位随机字符串,填充到明文之前 $random = $this->getRandomStr(); $text = $random . pack(" ...

  3. Please move or remove them before you can merge

    在使用git pull时,经常会遇到报错: Please move or remove them before you can merge 这是因为本地有修改,与云端别人提交的修改冲突,又没有merg ...

  4. iOS 取消按钮高亮显示方法

    objective-C 第1种方法: 设置按钮的normal 与 highlighted 一样的图片, 不过如果你也需要selected状态下的图片, 就不能这么做, 这样做在取消选中状态的时候就会显 ...

  5. WebAPI使用Swagger生成接口文档

    开发工具:VS2017 版本15.7.1 新建项目,选择空模板,下面只勾选WebAPI 配置Web.config <system.webServer> 节点改为 <system.we ...

  6. ASP.NET Core 2.0 MVC 发布部署--------- linux安装.NET CORE SDK具体操作链接以及操作总细节

    具体链接:https://www.microsoft.com/net/learn/get-started/linuxubuntu 如下图:

  7. 新版Java为什么要修改substring的实现

    Java字符串的截取操作可以通过substring来完成.有意思的是,这个方法从jdk1.0开始,一直到1.6都没有变化,但到了1.7实现方式却发生了改变.你可能会认为之所以要对一个成熟且稳定的方法做 ...

  8. gentoo emerge unable to sync

    gentoo emerge unable to sync Author: Tubo After setting SYNC to customized URL: SYNC="rsync://m ...

  9. javascript练习(二)

    案例 输出100个数字 案例  打印100以内 7的倍数 案例  打印100以内的奇数 案例  打印100以内所有偶数的和 打印图形 ********** ********** ********** ...

  10. 全连通图求最小生成树边权之积(邻接矩阵/prim/kruskal)

    Description 大家都知道最小生成树一般求的是构成最小生成树的边的权值之和. 现在请求构成最小生成树的边的权值之积 S,最终结果请输出 (S % 100003). P.S. 点之间的边为无向边 ...