题面

Pudding Monsters

问题描述

由于各种原因,桐人现在被困在 UnderWorldUnder WorldUnderWorld(以下简称 UWUWUW)中,而 UWUWUW 马上要迎来最终的压力测试——魔界入侵。
唯一一个神一般存在的 AdministratorAdministratorAdministrator 被消灭了,靠原本的整合骑士的力量
是远远不够的。所以爱丽丝动员了 UWUWUW 全体人民,与整合骑士一起抗击魔族。
在 UWUWUW 的驻地可以隐约看见魔族军队的大本营。整合骑士们打算在魔族入侵前发动一次奇袭,袭击魔族大本营!
为了降低风险,爱丽丝找到了你,一名优秀斥候,希望你能在奇袭前对魔族大本营进行侦查,并计算出袭击的难度。
经过侦查,你绘制出了魔族大本营的地图,然后发现,魔族大本营是一个 N×NN×NN×N 的网格图,一共有 NNN 支军队驻扎在一些网格中(不会有两只军队驻扎在一起)。
在大本营中,每有一个 k×k(1≤k≤N)k×k\ (1≤k≤N)k×k (1≤k≤N) 的子网格图包含恰好 kkk 支军队,我们袭击的难度就会增加 111 点。
现在请你根据绘制出的地图,告诉爱丽丝这次的袭击行动难度有多大。

输入格式

第一行,一个正整数 NNN,表示网格图的大小以及军队数量。
接下来 NNN 行,每行两个整数,Xi,YiX_i,Y_iXi​,Yi​,表示第i支军队的坐标。
保证每一行和每一列都恰有一只军队,即每一个 XiX_iXi​ 和每一个 YiY_iYi​ 都是不一样的。

输出格式

一行,一个整数表示袭击的难度。

样例

Input

5
1 1
3 2
2 4
5 5
4 3

Output

10

题解

唉,考试的时候没有看到加粗的那行字,直接 GGGGGG。
根据加粗的那行字,每行每列有且只有一个大本营,明显我们可以把二维的图映射到一个序列上,将二维问题转化为一维问题。
行号对应每个大本营在序列上的位置,列号对应每个大本营在序列上的权值。
不难发现这 nnn 个大本营就转化为了一个 111~nnn 的排列。而我们要求的问题,就转化为了满足 max−min=R−Lmax - min = R - Lmax−min=R−L 的区间 [L,RL,RL,R] 的个数为多少。
因为 max,minmax,minmax,min 分别对应着列号的最大最小值,R,LR,LR,L 分别对应着行号的最大最小值。满足上诉条件的区间就代表一个边长为 R−LR - LR−L(或者 max−minmax - minmax−min)的正方形里有 R−LR - LR−L(或者 max−minmax - minmax−min)个大本营。
注意我们要把二维矩阵中包含的所有正方形都统计完,而它们在序列上分别对应着区间 [1,11,11,1],[1,21,21,2]…[1,n1,n1,n]…[n,1n,1n,1],[n,2n,2n,2]…[n,nn,nn,n]。
尝试用线段树 + 扫描线维护。
将上述等式移项,记 Min=max−min−R+LMin = max - min - R + LMin=max−min−R+L,因为这是一个 111 ~ nnn 的排列,根据鸽巢原理,显然有max−min≥R−Lmax - min \geq R - Lmax−min≥R−L,所以有: Min≥0Min\geq 0Min≥0,那么显然满足条件的序列的 MinMinMin 值为 000,所以我们只用在线段树上维护 MinMinMin就好了,因为还要求个数,所以再维护值为 MinMinMin 的个数。
当扫描到 RRR 时,线段树上的单位节点 [l,rl,rl,r] 储存区间 [l,Rl,Rl,R],[l+1,Rl + 1,Rl+1,R]…[r,Rr,Rr,R] 对应的 MinMinMin 的值,和值为 MinMinMin 的区间的个数。
那么我们就得到了下述的基本框架,线段树的细节见代码:

  • 当每次 R++R++R++ 后,MinMinMin 的值显然会减一,区间修改。
  • 对于 max,minmax,minmax,min 的维护,我们可以用两个单调栈。
  • 每次单调栈的栈顶元素更新时,显然对于 statop−1sta_{top - 1}statop−1​ ~ statopsta_{top}statop​(还未更新)对应的序列的位置的 MinMinMin 值都因为 maxmaxmax 或 minminmin 的值的改变而受到了影响需要改变,再次进行区间修改。
  • 每次维护结束后 queryqueryquery 一次累加入答案。

代码

#include<cstdio>
#include<iostream>
#include<algorithm>using namespace std;const int N = 3e5 + 5;struct SegmentTree {#define M N << 2int l[M],r[M],Min[M],tag[M];long long cnt[M];void build(int p,int lf,int rg) {l[p] = lf,r[p] = rg;if(lf == rg) {Min[p] = lf; cnt[p] = 1;return;}int mid = (lf + rg) >> 1;build(p << 1,lf,mid);build(p << 1 | 1,mid + 1,rg);Min[p] = Min[p << 1];}inline void pushdown(int p) {if(!tag[p]) return;Min[p << 1] += tag[p];Min[p << 1 | 1] += tag[p];tag[p << 1] += tag[p];tag[p << 1 | 1] += tag[p];tag[p] = 0;}inline void pushup(int p) {Min[p] = min(Min[p << 1],Min[p << 1 | 1]); cnt[p] = 0;if(Min[p] == Min[p << 1]) cnt[p] += cnt[p << 1];if(Min[p] == Min[p << 1 | 1]) cnt[p] += cnt[p << 1 | 1];}void add(int p,int L,int R,int k) {if(L <= l[p] && r[p] <= R) {Min[p] += k; tag[p] += k;return;}pushdown(p);int mid = (l[p] + r[p]) >> 1;if(L <= mid) add(p << 1,L,R,k);if(R >  mid) add(p << 1 | 1,L,R,k);pushup(p);}long long query(int p,int L,int R) {if(L <= l[p] && r[p] <= R) return Min[p] == 0 ? cnt[p] : 0;int mid = (l[p] + r[p]) >> 1;long long ans = 0; pushdown(p);if(L <= mid) ans += query(p << 1,L,R);if(R >  mid) ans += query(p << 1 | 1,L,R);return ans;}
}tr;
struct data {int x,y;bool operator < (const data n) const {return x < n.x;        }
}a[N],sta1[N],sta2[N];
inline int read() {int x = 0,flag = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-')flag = -1;ch = getchar();}while(ch >='0' && ch <='9'){x = (x << 3) + (x << 1) + ch - 48;ch = getchar();}return x * flag;
}
int main() {int n = read(); int top1 = 0,top2 = 0;for(int i = 1; i <= n; i++)a[i].x = read(),a[i].y = read();sort(a + 1,a + 1 + n); tr.build(1,1,n);long long ans = 0;for(int i = 1; i <= n; i++) {tr.add(1,1,n,-1);while(top1 && sta1[top1].y < a[i].y)tr.add(1,sta1[top1 - 1].x + 1,sta1[top1].x,a[i].y - sta1[top1].y),--top1;sta1[++top1] = (data) {i,a[i].y};while(top2 && sta2[top2].y > a[i].y)tr.add(1,sta2[top2 - 1].x + 1,sta2[top2].x,sta2[top2].y - a[i].y),--top2;sta2[++top2] = (data) {i,a[i].y};ans += tr.query(1,1,i);}printf("%lld",ans);return 0;
}

【机房练习赛 5.15】奇袭 CF526F Pudding Monsters相关推荐

  1. [CF 526 F] Pudding Monsters(单调栈 + 线段树)

    CF526F Pudding Monsters problem solution code problem luogu翻译 solution observation :每行每列恰好有一个棋子,所以如果 ...

  2. 【CF526F】Pudding Monsters

    题意: 给你一个排列pi,问你有对少个区间的值域段是连续的. n≤3e5 题解: bzoj3745 转载于:https://www.cnblogs.com/yinwuxiao/p/9474652.ht ...

  3. Codeforces 436D Pudding Monsters

    题意简述 开始有无限长的一段格子,有n个格子种有布丁怪兽,一开始连续的布丁怪兽算一个布丁怪兽. 每回合你可以将一个布丁怪兽向左或右移动,他会在碰到第一个布丁怪兽时停下,并与其合并. 有m个特殊格子,询 ...

  4. [机房练习赛4.7] 深意 KMP

    深意(meaning.in/meaning.out) 有的词语常常别有深意,比如hehe可以单纯的表示hehe,也可以表示"excuse me?!",现给出一段话s,和一个单词t, ...

  5. [机房练习赛4.3]drive

    Problem 2. drive Input file: drive.in Output file: drive.out Time limit: 2 second 工头cky 最近开了一家贸易公司,开 ...

  6. CF526 F Pudding Monsters

    题意 求连续段数. n<=3e5 思路 析合树板题(然而并不会) 考虑分治求. 讨论max与min在左右两边的四种情况就行了. O ( n l o g n ) O(n log n) O(nlog ...

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

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

  8. 20170117 机房『练习赛』

    20170117 机房『练习赛』 现代科学,面广枝繁,不是一辈子学得了的.惟一的办法是集中精力,先打破一缺口,建立一块或几块根据地,然后乘胜追击,逐步扩大研究领域.此法单刀直入,易见成效. -- 王梓 ...

  9. 整体机房/数据中心设计步骤

    第一步: 机房环境勘察 1.机房是新建设还是旧机房改造,机房位置,本大楼总层高是多少,机房会于大楼几层 2.查看机房的内部结构,是否存在有消防水管.用水管.中央空调管道.排污管,如果有做好防漏措施 3 ...

最新文章

  1. MegEngine计算图、MatMul优化解析
  2. 3D点云点云分割、目标检测、分类
  3. 《The Coaching Booster》问与答
  4. 提升tomcat 性能的经验
  5. 分析手机网站的优势思维结构图_写了100多篇原创文章,我常用的在线工具网站推荐给大家...
  6. 笔记本html连接电视机,WinXP系统的笔记本如何连接电视?笔记本连接液晶电视方法...
  7. Exchange 2013学习(六),脱机通讯簿
  8. MATLAB无边框输出图像
  9. 基于生成对抗的知识图谱零样本关系学习 AAAI2020
  10. 在windows xp下,一块网卡绑定多个ip
  11. 为什么现在物质越来越丰富,人的幸福感反而越来越低?
  12. kafka 不同分区文件存储_Kafka 系列(二)文件存储机制与Producer架构原理怎样保证数据可靠性??...
  13. 生成式模型(generative) vs 判别式模型(discriminative)
  14. [原译]一步步教你制作WPF圆形玻璃按钮
  15. sqlserver2005身份验证
  16. cdlinux之U盘启动cdlinux破解wifi(计算机系破解无线密码的方式 就不使用wifi万能钥匙了)-- 没有发现无线网卡
  17. QT + VTK (QVTKWidget)显示点云,内存泄漏的解决方法
  18. Python:OpenCV4人脸关键点检测以及表情检测
  19. 【Windows MTU】Windows上最大传输单元MTU值的查看和设置
  20. chrome浏览器去除蓝色边框和黄色背景色

热门文章

  1. ConfigUtility
  2. 2021-2022-1 ACM集训队每周程序设计竞赛(5) - 问题 B: 跳蛙 - 题解
  3. 【通信】基于非相干信号子空间测向算法实现宽带信号的测向附matlab代码
  4. Latex: 减少图与文字之间的空白间隙
  5. 【半精度】Pytorch模型加速和减少显存
  6. 转载 [技术] SLI常见问题及答案 网址
  7. 推荐系统开源软件列表汇总和点评
  8. 支付宝小程序云开发(Serverless)
  9. DHTML是dynamic HTML短语的缩写,即动态HTML
  10. 【Unity3D实现自定义调色板】