【CF526F】Pudding Monsters cdq分治
【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分治的更多相关文章
- Codeforces 526F Pudding Monsters - CDQ分治 - 桶排序
In this problem you will meet the simplified model of game Pudding Monsters. An important process in ...
- CF526F Pudding Monsters
CF526F Pudding Monsters 题目大意:给出一个\(n* n\)的棋盘,其中有\(n\)个格子包含棋子. 每行每列恰有一个棋子. 求\(k*k\)的恰好包含\(k\)枚棋子的子矩形个 ...
- CodeForces526F:Pudding Monsters (分治)
In this problem you will meet the simplified model of game Pudding Monsters. An important process in ...
- [Codeforce526F]:Pudding Monsters(分治)
题目传送门 题目描述 由于各种原因,桐人现在被困在Under World(以下简称UW)中,而UW马上要迎来最终的压力测试——魔界入侵.唯一一个神一般存在的Administrator被消灭了,靠原本的 ...
- 「CF526F」 Pudding Monsters
CF526F Pudding Monsters 传送门 模型转换:对于一个 \(n\times n\) 的棋盘,若每行每列仅有一个棋子,令 \(a_x=y\),则 \(a\) 为一个排列. 转换成排列 ...
- [Codeforces526F]Pudding Monsters 分治
F. Pudding Monsters time limit per test 2 seconds memory limit per test 256 megabytes In this proble ...
- 【教程】简易CDQ分治教程&学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- BZOJ 2683 简单题 ——CDQ分治
[题目分析] 感觉CDQ分治和整体二分有着很本质的区别. 为什么还有许多人把他们放在一起,也许是因为代码很像吧. CDQ分治最重要的是加入了时间对答案的影响,x,y,t三个条件. 排序解决了x ,分治 ...
- HDU5618 & CDQ分治
Description: 三维数点 Solution: 第一道cdq分治...感觉还是很显然的虽然题目不能再傻逼了... Code: /*=============================== ...
随机推荐
- mysql 时间类型精确到毫秒、微秒及其处理
一.MySQL 获得毫秒.微秒及对毫秒.微秒的处理 MySQL 较新的版本中(MySQL 6.0.5),也还没有产生微秒的函数,now() 只能精确到秒. MySQL 中也没有存储带有毫秒.微秒的日期 ...
- iOS 10.3下使用Fiddler抓取HTTPS请求
最近使用Fiddler抓取手机上的HTTPS请求时,遇到一个问题.设置完之后,访问HTTPS的页面,却得到一个错误 网络出错,轻触屏幕重新加载:-1202 (如下图所示) 我印象中,之前都好好的, ...
- SpringBoot 日志框架
默认的日志框架 logback SpringBoot使用Logback作为默认的日志框架.logback 是log4j框架的作者开发的新一代日志框架,它效率更高.能够适应诸多的运行环境,同时天然支持S ...
- SoapUI Pro Project Solution Collection –Easy develop Groovy Script to improve SoapUI ability
As you know the groovy script and java script language is the soapui supported .but unfortunately So ...
- Jmeter笔记:响应断言详解
转自:http://www.51testing.com/html/80/n-2430180.html 平时我们使用jmeter进行性能测试时,经常会用到断言.jmeter提供了很多种断言,本来想全都写 ...
- 基于CentOS体验万象优图鉴黄服务
系统要求:CentOS 7.2 64 位操作系统 初始化配置 使用万象优图图片鉴黄 API 接口,我们需要先完成以下步骤: 获取腾讯云账号 APP ID 配置云 API 公钥/密钥 配置优图 buck ...
- loadrunner 关联匹配多个值
loadrunner 关联获取从服务器返回相关值,如果需要把所有匹配的值都获取并且把这些值打印出来,怎么做呢? 1.首先要把把所有的匹配值都保存起来,需要在关联函数里面多传递一个参数:"Or ...
- Android Studio配置文件路径修改
用Android Studio进行Android开发已经成为趋势了,好的工具要用得称手也少不了好的调教,在Windows下更是如此.这里对Android Studio的相关配置文件的路径修改做下小结. ...
- lua -- 所有UI组件的基类
-- 组件行为基础 local Behavior = class("Behavior"); function Behavior:ctor(name) self.owner = ni ...
- wamp多站点多端口配置
1.配置httpd.conf 监听多个端口 #Listen 12.34.56.78:80 Listen 8081 Listen 8082 Listen 8083 可以通过netstat -n -a查看 ...