T3奇袭


题目描述

由于各种原因,桐人现在被困在Under World(以下简称UW)中,而UW马上 要迎来最终的压力测试——魔界入侵。

唯一一个神一般存在的Administrator被消灭了,靠原本的整合骑士的力量 是远远不够的。所以爱丽丝动员了UW全体人民,与整合骑士一起抗击魔族。

在UW的驻地可以隐约看见魔族军队的大本营。整合骑士们打算在魔族入侵前 发动一次奇袭,袭击魔族大本营!

为了降低风险,爱丽丝找到了你,一名优秀斥候,希望你能在奇袭前对魔族 大本营进行侦查,并计算出袭击的难度。

经过侦查,你绘制出了魔族大本营的地图,然后发现,魔族大本营是一个N ×N的网格图,一共有N支军队驻扎在一些网格中(不会有两只军队驻扎在一起)。

在大本营中,每有一个k×k(1≤k≤N)的子网格图包含恰好k支军队,我们袭 击的难度就会增加1点。

现在请你根据绘制出的地图,告诉爱丽丝这次的袭击行动难度有多大。

输入

第一行,一个正整数N,表示网格图的大小以及军队数量。

接下来N行,每行两个整数,Xi,Yi,表示第i支军队的坐标。

保证每一行和每一列都恰有一只军队,即每一个Xi和每一个Yi都是不一样 的。

输出

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

样例输入

5
1 1
3 2
2 4
5 5
4 3

样例输出

10

提示

【样例解释】
显然,分别以(2,2)和(4,4)为左上,右下顶点的一个子网格图中有3支军队,
这为我们的难度贡献了1点。
类似的子网格图在原图中能找出10个。
【数据范围】
对于30%的数据,N ≤ 100
对于60%的数据,N ≤ 5000
对于100%的数据,N ≤ 50000


 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define Re register
using namespace std;
int read()
{
int f=,x=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch<=''&&ch>=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f*x;
}
const int maxn=;
int n,a[maxn],ans;
int lmax[maxn],lmin[maxn],rmax[maxn],rmin[maxn],t[*maxn];
void work(int l,int r,int mid)
{
lmax[mid]=lmin[mid]=a[mid];
rmax[mid+]=rmin[mid+]=a[mid+];
for(int i=mid-;i>=l;i--)
{
lmax[i]=max(lmax[i+],a[i]);
lmin[i]=min(lmin[i+],a[i]);
}
for(int i=mid+;i<=r;i++)
{
rmax[i]=max(rmax[i-],a[i]);
rmin[i]=min(rmin[i-],a[i]);
}
//both left
for(int i=l;i<=mid;i++)
{
int j=i+lmax[i]-lmin[i];
if(j>mid&&j<=r)
if(lmax[i]>rmax[j]&&lmin[i]<rmin[j]) //由于左右两个区间必定不会有相等的元素,所以不用考虑等号
ans++;
}
//min is on left ,max is on right
int L=mid+,R=mid+;
while(L<=r&&lmax[l]>rmax[L])
{
t[rmax[L]-L+n]--;//走过的路径是不合法的
L++;
}
while(R<=r&&lmin[l]<rmin[R])
{
t[rmax[R]-R+n]++;//走过的路径都是合法的
R++;
}
for(int i=l;i<=mid;i++)//i从l向mid移动,lmin变大,lmax变小,使得LR能向左移动
{
while(L>mid+&&lmax[i]<rmax[L-])//当L==mid+1时,退出循环
{
L--;
t[rmax[L]-L+n]++;
}
while(R>mid+&&lmin[i]>rmin[R-])
{
R--;
t[rmax[R]-R+n]--;
}
if(t[lmin[i]-i+n]>)
ans+=t[lmin[i]-i+n];
}
for(int i=mid+;i<=r;i++)
t[rmax[i]-i+n]=;
}
void divide(int l,int r)
{
if(l==r)
{
ans++;
return;
}
int mid=(l+r)>>;
divide(l,mid);
divide(mid+,r);
work(l,r,mid);
reverse(a+l,a+r+);
if(((r-l)%)==) mid--;//1 2 3 4 5 交换后 5 4 3 2 1 仍然应该使123在一个区间所以 mid--;
work(l,r,mid);
reverse(a+l,a+r+);
}
int main()
{
n=read();
for(int i=;i<=n;i++)
{
int x,y;
x=read();y=read();
a[x]=y;
}
divide(,n);
printf("%d",ans);
}

这两种实现都正确,实质相同

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define Re register
using namespace std;
int read()
{
int f=,x=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch<=''&&ch>=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f*x;
}
const int maxn=;
int n,a[maxn],ans;
int lmax[maxn],lmin[maxn],rmax[maxn],rmin[maxn],t[*maxn];
void work(int l,int r,int mid)
{
lmax[mid]=lmin[mid]=a[mid];
rmax[mid+]=rmin[mid+]=a[mid+];
for(int i=mid-;i>=l;i--)
{
lmax[i]=max(lmax[i+],a[i]);
lmin[i]=min(lmin[i+],a[i]);
}
for(int i=mid+;i<=r;i++)
{
rmax[i]=max(rmax[i-],a[i]);
rmin[i]=min(rmin[i-],a[i]);
}
//both left
for(int i=l;i<=mid;i++)
{
int j=i+lmax[i]-lmin[i];
if(j>mid&&j<=r)
if(lmax[i]>rmax[j]&&lmin[i]<rmin[j]) //由于左右两个区间必定不会有相等的元素,所以不用考虑等号,下面同理
ans++;
}
//min is on left ,max is on right
int L=mid+,R=mid+;
for(int i=mid;i>=l;i--)//i从mid向l移动,lmin变小,lmax变大,使得LR能向向右移动
{
while(L<=r&&lmax[i]>rmax[L])//属于不合法的部分
{
t[rmax[L]-L+n]--;
L++;
}
while(R<=r&&lmin[i]<rmin[R])//
{
t[rmax[R]-R+n]++;//合法的
R++;
}
if(t[lmin[i]-i+n]>)
ans+=t[lmin[i]-i+n];
}
for(int i=mid+;i<=r;i++)
t[rmax[i]-i+n]=;
}
void divide(int l,int r)
{
if(l==r)
{
ans++;
return;
}
int mid=(l+r)>>;
divide(l,mid);
divide(mid+,r);
work(l,r,mid);
reverse(a+l,a+r+);
if(((r-l)%)==) mid--;//1 2 3 4 5 交换后 5 4 3 2 1 仍然应该使123在一个区间所以 mid--;
work(l,r,mid);
reverse(a+l,a+r+);
}
int main()
{
n=read();
for(int i=;i<=n;i++)
{
int x,y;
x=read();y=read();
a[x]=y;
}
divide(,n);
printf("%d",ans);
}

模拟4题解 T3奇袭的更多相关文章

  1. 模拟3题解 T3建造游乐园

    T3建造游乐园 这题的关键是推式子 i个点中,有g[i]个方案是度为偶数但不一定连通那么就要减去不合法的设已有j个合法,其个数为f[j],剩下i-j个的方案数是g[i-j]选出来一个固定的点在合法的j ...

  2. [CQOI2012]模拟工厂 题解(搜索+贪心)

    [CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...

  3. 【3.16高一(第二学期)模拟测试】 T3,T4题解

    看到这个标题我想你一定会想为什么小编只发T3,T4的题解,原因有很多:1)小编也不怎么会讲:2)小编搜遍各大OJ,都没有找到可以提交的地方:3)虽然给了测试数据,小编懒得一个一个试.如果你找到了测评网 ...

  4. HGOI NOIP模拟4 题解

    NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...

  5. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  6. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  7. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  8. 【洛谷】xht模拟赛 题解

    前言 大家期待已久并没有的题解终于来啦~ 这次的T1和HAOI2016撞题了...深表歉意...表示自己真的不知情... 天下的水题总是水得相似,神题各有各的神法.--<安娜·卡列妮娜> ...

  9. 10.8 wtx模拟题题解

    填坑 orz w_x_c_q w_x_c_q的模拟赛(150pts,炸了) money 题目背景: 王小呆又陷入自己的梦里.(活在梦里...) 题目描述: 王小呆是一个有梦想的小菜鸡,那就是赚好多好多 ...

随机推荐

  1. “Error: Encountered an improper argument”的解决方法

    之前遇到过的问题,后来解决后再次遇到又忘记了, 这是keil 的bug 路径只要都是字母就可以了

  2. CentOS 8上安装Docker

    前言 这几天,想玩玩docker,方便漏洞复现,我去学docker搭建了,感觉不错,挺方便的 安装步骤: 1.下载docker-ce的repo curl https://download.docker ...

  3. 06_Hibernate缓存

    一.缓存概述 什么是缓存: 缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取. 缓存的好处: 提升程序运行的效率.缓存技术是Hibernate ...

  4. Undertow服务器基础分析 - XNIO

    阅读更多 我们从名字上就能看出这是一个NIO思想为基础的IO框架,X是指这个框架可以有多种实现,我们可以从代码库 https://github.com/xnio 中发现一个项目xnio-native, ...

  5. oracle中utl_file包读写文件操作实例学习

    在oracle中utl_file包提供了一些操作文本文件的函数和过程,学习了一下他的基本操作 1.创建directory,并给用户授权 复制代码 代码如下: --创建directory create ...

  6. windows API 第13篇 MoveFileEx

    上一篇介绍了MoveFile,这次分析MoveFileEx,它是MoveFile的扩展函数,功能还要更加强大些.先看定义: BOOL WINAPI MoveFileEx( _In_     LPCTS ...

  7. 2、mysql密码过期的修改方法(your password has expired)

    今天打开SQLyog提示密码过期:Your password has expired 解决方法:    1.  启动MySQL服务 2.  启动MySQL后台 3.  执行以下命令 step 1: S ...

  8. JZOJ5894【NOIP2018模拟10.5】同余方程

    题目 Description

  9. Java基础——List集合整理(脑图,源码,面试题)

    常在知乎牛客网关注Java的一些面试,了解过校招社招常面哪些内容.Java集合不仅使用频率高而且在初面中也常常被问到,何止是常常,关于ArrayList的扩容,HashMap的一些底层等等都被问到烂了 ...

  10. jQuery3动画+创建元素

    一.jQuery的动画 1.jQuery自带的动画 1>变化的是width height opacity display <!DOCTYPE html> <html lang= ...