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. ArrayBlockingQueue的使用案例:

    ArrayBlockingQueue的介绍: ArrayBlockingQueue,顾名思义:基于数组的阻塞队列.数组是要指定长度的,所以使用ArrayBlockingQueue时必须指定长度,也就是 ...

  2. 启动zuul时候报错:The bean 'proxyRequestHelper', defined in class path resource [org/springframework/cloud/netflix/zuul

    启动zuul时候报错:The bean 'proxyRequestHelper', defined in class path resource [org/springframework/cloud/ ...

  3. 记录下sparkStream的做法(scala)

    一直用storm做实时流的开发,之前系统学过spark但是一直没做个模版出来用,国庆节有时间准备做个sparkStream的模板用来防止以后公司要用.(功能模拟华为日常需求,db入库hadoop环境) ...

  4. Vue跳转相同路由不同参数,解决页面数据不自动刷新

    参考: https://www.cnblogs.com/ainyi/p/9340311.html https://blog.csdn.net/weixin_41888813/article/detai ...

  5. 比特镇旅游(Tourist Attractions)【暴力+Bitset 附Bitset用法】

    Online Judge:NOIP2016十连测第一场 T2 Label:暴力,Bitset 题目描述 在美丽的比特镇一共有n个景区,编号依次为1到n,它们之间通过若干条双向道路连接. Byteasa ...

  6. boost 日期时间计算

    示例代码如下: #include <boost/date_time/gregorian/gregorian.hpp> #include <boost/date_time/posix_ ...

  7. Windows API 第21篇 DeleteVolumeMountPoint 删除挂载点

    函数原型:BOOL DeleteVolumeMountPoint(                                                      LPCTSTR lpszV ...

  8. SAS信用评分之逻辑回归的变量选择

    SAS信用评分之逻辑回归的变量选择 关于woe的转化,这一部在之前的这篇文章:sas批量输出变量woe值中已经写了,woe也只是简单的公式转化而已,所以在这系列中就不细究了哈.这次的文章我想来讲逻辑回 ...

  9. Shell执行SQL,并存入变量

    shell的语法还是比较严格的(比如变量赋值,两边不能用等号) #!/bin/bash ids=$(mysql -h172. -uroot -p1qaz@WSX -N -e "select ...

  10. IDEA快速定位错误快捷键