【CF526F】Pudding Monsters

题意:给你一个排列$p_i$,问你有对少个区间的值域段是连续的。

$n\le 3\times 10^5$

题解:bzoj3745 Norma 的弱化版。直接cdq分治,考虑最大值和最小值分别在左右两边的情况。这里就当练练手了。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=300010;
typedef long long ll;
const int inf=1<<30;
ll ans;
int n;
int v[maxn],rm[maxn],rn[maxn],lm[maxn],ln[maxn],s1[maxn<<1],s2[maxn<<1];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
}
void solve(int l,int r)
{
if(l==r) return ;
int i,j1,j2,mid=(l+r)>>1;
solve(l,mid),solve(mid+1,r);
for(lm[mid+1]=0,ln[mid+1]=inf,i=mid;i>=l;i--) lm[i]=max(lm[i+1],v[i]),ln[i]=min(ln[i+1],v[i]);
for(rm[mid]=0,rn[mid]=inf,i=mid+1;i<=r;i++) rm[i]=max(rm[i-1],v[i]),rn[i]=min(rn[i-1],v[i]);
for(i=mid,j1=j2=mid+1;i>=l;i--)
{
while(j1<=r&&rn[j1]>ln[i]&&rm[j1]<lm[i]) s1[rn[j1]+j1]++,j1++;
while(j2<=r&&rm[j2]<lm[i]) s2[rn[j2]+j2]++,j2++;
if(j1!=mid+1&&j1-1>=i+lm[i]-ln[i]) ans++;
ans+=s2[i+lm[i]]-s1[i+lm[i]];
}
for(i=mid+1;i<=r;i++) s1[rn[i]+i]=s2[rn[i]+i]=0;
for(i=mid+1,j1=j2=mid;i<=r;i++)
{
while(j1>=l&&ln[j1]>rn[i]&&lm[j1]<rm[i]) s1[ln[j1]-j1+n]++,j1--;
while(j2>=l&&lm[j2]<rm[i]) s2[ln[j2]-j2+n]++,j2--;
if(j1!=mid&&j1+1<=i-(rm[i]-rn[i])) ans++;
ans+=s2[rm[i]-i+n]-s1[rm[i]-i+n];
}
for(i=mid;i>=l;i--) s1[ln[i]-i+n]=s2[ln[i]-i+n]=0;
}
int main()
{
n=rd();
int i,a;
for(i=1;i<=n;i++) a=rd(),v[a]=rd();
solve(1,n);
printf("%lld",ans+n);
return 0;
}//3 1 1 2 2 3 3

【CF526F】Pudding Monsters cdq分治的更多相关文章

  1. Codeforces 526F Pudding Monsters - CDQ分治 - 桶排序

    In this problem you will meet the simplified model of game Pudding Monsters. An important process in ...

  2. CF526F Pudding Monsters

    CF526F Pudding Monsters 题目大意:给出一个\(n* n\)的棋盘,其中有\(n\)个格子包含棋子. 每行每列恰有一个棋子. 求\(k*k\)的恰好包含\(k\)枚棋子的子矩形个 ...

  3. CodeForces526F:Pudding Monsters (分治)

    In this problem you will meet the simplified model of game Pudding Monsters. An important process in ...

  4. [Codeforce526F]:Pudding Monsters(分治)

    题目传送门 题目描述 由于各种原因,桐人现在被困在Under World(以下简称UW)中,而UW马上要迎来最终的压力测试——魔界入侵.唯一一个神一般存在的Administrator被消灭了,靠原本的 ...

  5. 「CF526F」 Pudding Monsters

    CF526F Pudding Monsters 传送门 模型转换:对于一个 \(n\times n\) 的棋盘,若每行每列仅有一个棋子,令 \(a_x=y\),则 \(a\) 为一个排列. 转换成排列 ...

  6. [Codeforces526F]Pudding Monsters 分治

    F. Pudding Monsters time limit per test 2 seconds memory limit per test 256 megabytes In this proble ...

  7. 【教程】简易CDQ分治教程&学习笔记

    前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦!       CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...

  8. BZOJ 2683 简单题 ——CDQ分治

    [题目分析] 感觉CDQ分治和整体二分有着很本质的区别. 为什么还有许多人把他们放在一起,也许是因为代码很像吧. CDQ分治最重要的是加入了时间对答案的影响,x,y,t三个条件. 排序解决了x ,分治 ...

  9. HDU5618 & CDQ分治

    Description: 三维数点 Solution: 第一道cdq分治...感觉还是很显然的虽然题目不能再傻逼了... Code: /*=============================== ...

随机推荐

  1. WCF:又是枚举惹的祸

    在WCF中使用枚举不便于服务的演化,因为增加一个枚举值,需要更新所有客户端.某种程度上说这也带来了好处,即:防止了新增枚举值带来的意外(宁可失败,也不意外). 鉴于枚举的这种表现,以后尽可能的采用in ...

  2. PC高级语言与施耐德、罗克韦尔、台达等PLC的Modbus通讯源代码(ModbusTCP.DLL/ModbusRTU.DLL)

    1.0  通讯组件概述 该类通讯组件适用于基于PC高级语言的工业自动化控制系统,用于PC与可编程控制器(PLC).智能仪表等进行数据通讯.组件采用动态链接库文件(*.DLL)的形式,在PC系统的项目工 ...

  3. 函数func_splitString:将字符串按指定方式分割,获取指定位置的数

    CREATE FUNCTION `func_splitString` ( f_string varchar(1000),f_delimiter varchar(5),f_order int) RETU ...

  4. 详解CentOS设置163的yum源的过程

    转自启动CentOS系统,打开火狐浏览器,如下图所示: 2 登录“mirrors.163.com”,如下图所示: 3 点击centos后面的“centos使用帮助”,如下图所示: 4 可以看到设置和使 ...

  5. donet core 2.1 DateTime ToString() 方法 在不同平台返回的时间格式不一样?

    跟操作系统的 设置的时间格式和系统区域设置有关.为了保持一致性.参数自己写好格式.

  6. CAS Maven

    https://wiki.jasig.org/display/CASUM/Best+Practice+-+Setting+Up+CAS+Locally+using+the+Maven2+WAR+Ove ...

  7. 【Visual Studio】VS发布应用未能创建默认证书的问题解决方法

    解决方法:点击你创建的项目 右键> 属性>签名>从存储区选择>选择证书这时候显示无可用证书 ,然后我从文件区选择了一个结果,又出现了第二个问题.提示我“签名时出错: 指定了无效 ...

  8. golang ----gc问题

    go程序内存占用大的问题 这个问题在我们对后台服务进行压力测试时发现,我们模拟大量的用户请求访问后台服务,这时各服务模块能观察到明显的内存占用上升.但是当停止压测时,内存占用并未发生明显的下降.花了很 ...

  9. 2.翻译系列:为EF Code-First设置开发环境(EF 6 Code-First系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/setup-entity-framework-code-first-environment ...

  10. mysql 物理数据存放

    报错误:1030 - Got error 28 from storage engine 3.在系统中查看/tmp是否已经满了: [root@localhost /]# df /tmp/ Filesys ...