hdu6089 Rikka with Terrorist
题意:n*m的平面内有K个不安全点,Q个询问位置在(x,y)的人能走到多少个点?走到:(x,y)和(x',y')之间的矩形中不包含不安全点。
标程:
#include<bits/stdc++.h>
#define mid ((l+r)>>1)
using namespace std;
int read()
{
int x=,f=;char ch=getchar();
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') x=(x<<)+(x<<)+ch-'',ch=getchar();
return x*f;
}
const int N=;
typedef long long ll;
int n,m,K,Q,T_Max[N<<],tot,Max;
ll ans[N],T_sum[N<<],T_suml[N<<];
struct node{int x,y,id,ty;node(){} node(int a,int b,int c,int d){x=a;y=b;id=c;ty=d;}}a[N*],dg[N],q[N];
bool cmp(const node &A,const node &B) {return A.x<B.x||A.x==B.x&&A.y<B.y||A.x==B.x&&A.y==B.y&&A.ty<B.ty;}//排序时||不要写成&&!
ll qry_sum(int k,int l,int r,int L,int R,int &mx)//表示当前区间的右边下界为mx时的折线下面积
{
if (L<=l&&r<=R)
{
if (mx>=T_Max[k]) return (ll)mx*(r-l+);
if (l==r) return mx=T_Max[k];
int tt=T_Max[k<<|]; ll res=;
if (mx>=tt)
{
res+=(ll)mx*(r-mid);//mx会被修改,注意统计顺序!
res+=qry_sum(k<<,l,mid,L,R,mx);
}else {
res+=T_suml[k];
res+=qry_sum(k<<|,mid+,r,L,R,mx);
}
mx=T_Max[k]; return res;
}
ll s=;
if (R>mid) s+=qry_sum(k<<|,mid+,r,L,R,mx);//先走右边,更新下界
if (L<=mid) s+=qry_sum(k<<,l,mid,L,R,mx);
return s;
}
void ins(int k,int l,int r,int x,int y)
{
if (l==r)
{
if (y>T_Max[k]) T_Max[k]=T_sum[k]=y;
return;
}
if (x<=mid) ins(k<<,l,mid,x,y);else ins(k<<|,mid+,r,x,y);
int tt=T_Max[k<<|];
T_suml[k]=qry_sum(k<<,l,mid,l,mid,tt);//注意如果直接传入T_Max[k<<1|1]的话,在&下会被修改。
T_Max[k]=max(T_Max[k<<],T_Max[k<<|]);
T_sum[k]=T_suml[k]+T_sum[k<<|];
}
void work()
{
tot=;
for (int i=;i<=K;i++) a[++tot]=node(dg[i].x,dg[i].y,i,);
for (int i=;i<=Q;i++) a[++tot]=node(q[i].x,q[i].y,i,);
sort(a+,a+tot+,cmp);
for (int i=;i<=tot;i++)
{
if (!a[i].ty) ins(,,m,a[i].y,a[i].x);
else {
Max=;ans[a[i].id]+=qry_sum(,,m,,a[i].y,Max);//二维数点
Max=;ans[a[i].id]-=qry_sum(,,m,a[i].y,a[i].y,Max);//减去重复的一条同行/同列轴
}
}
}
int main()
{
int T=read();
while (T--)
{
n=read();m=read();K=read();Q=read();
for (int i=;i<=K;i++) dg[i].x=read(),dg[i].y=read();
for (int i=;i<=Q;i++) q[i].x=read(),q[i].y=read(),ans[i]=;//组测清零
for (int i=;i<;i++)
{
work();
for (int i=;i<=(m<<);i++) T_sum[i]=T_suml[i]=T_Max[i]=;
for (int j=;j<=K;j++) dg[j].x=n-dg[j].x+,swap(dg[j].x,dg[j].y);//90度旋转坐标
for (int j=;j<=Q;j++) q[j].x=n-q[j].x+,swap(q[j].x,q[j].y);
swap(n,m);
}
for (int i=;i<=Q;i++) printf("%lld\n",(ll)n*m-ans[i]);
}
return ;
}
题解:李超树
就是为了此神题才去学习了一下李超树。
以x坐标的移动来看可以到达的点的范围,从起点轴向两边形成不规则菱形。
分四块讨论,以左下角为例,线段树上的点为y坐标,维护递减折线。左区间的高度要大于等于右区间,所以更新的时候要把右区间的高度也维护进左区间。求折线下面积和的时候,维护一个右方高度下界,先统计右区间再统计左区间。
hdu6089 Rikka with Terrorist的更多相关文章
- 【hdu 6089】Rikka with Terrorist
题意 有一个 \(n\times m\) 的二维网格,其中有 \(k\) 个禁止点. 有 \(q\) 组询问,每组询问为给一个点,求有多少个矩形以这个点为一角且不包含禁止点. \(n,m,k,q\le ...
- HDU 6089 Rikka with Terrorist (线段树)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6089 题解 这波强行维护搞得我很懵逼... 扫描线,只考虑每个点能走到左上方(不包括正上方,但包括正左 ...
- 2016暑假多校联合---Rikka with Sequence (线段树)
2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...
- hdu.5203.Rikka with wood sticks(数学推导:一条长度为L的线段经分割后可以构成几种三角形)
Rikka with wood sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- hdu.5202.Rikka with string(贪心)
Rikka with string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 树形DP 2013多校8(Terrorist’s destroy HDU4679)
题意: There is a city which is built like a tree.A terrorist wants to destroy the city's roads. But no ...
- HDU 5831 Rikka with Parenthesis II(六花与括号II)
31 Rikka with Parenthesis II (六花与括号II) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- HUD5423 Rikka with Tree(DFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5423 Rikka with Tree Time Limit: 2000/1000 MS (Java/O ...
- HDU 5422 Rikka with Graph
Rikka with Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
随机推荐
- (数据科学学习手札59)从抓取数据到生成shp文件并展示
一.简介 shp格式的文件是地理信息领域最常见的文件格式之一,很好的结合了矢量数据与对应的标量数据,而在Python中我们可以使用pyshp来完成创建shp文件的过程,本文将从如何从高德地图获取矢量信 ...
- Mac OS X终端的常用操作命令(UNIX指令)
用了十多年windows,终于换了个高配Mac,俗话说 无论前端还是后端最终还是走向了linux,无论是换了多少台PC最终都会走向Mac.不学习命令行用什么Mac? 干就完了~ pwd 显示现在的文件 ...
- android中的属性资源
属性资源可以很好的控制自定义View组件的外观行为. 属性资源放置在/res/values目录下,属性资源文件的根目录元素是<resources.../>,该元素包含如下两个子元素: at ...
- 【学术篇】51nod 1238 最小公倍数之和
这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \s ...
- ES6 Sybol属性
Symbol: 概念:ES6中的添加了一种原始数据类型symbol(已有的原始数据类型:String, Number, boolean, null, undefined, 对象) 特点: 1.Symb ...
- Java ----单个list 删除元素
转载:https://www.cnblogs.com/lostyears/p/8809336.html 方式一:使用Iterator的remove()方法 public class Test { pu ...
- BeanFactory 和 ApplicationContext 区别
区别 BeanFactory: Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能 BeanFactory在启动的时候不会去实例化Bean,中有从容器中拿Bean ...
- C/C++ 无法解析的外部符号解决方案
{ //0 类的成员函数没有实现就调用 //1 调用没有编译生成cpp 的函数 //2 没有加载lib //3 最重要的就是有声明无实现 }
- curl 命令帮助及使用
目录 一.简介 二.curl 帮助文档 三.curl 的使用 前言 刚接触 curl 就发现它的非常强大.奈何帮助文档全是英文,看起来贼费劲.无奈只能硬着头皮用自己蹩脚的英语和翻译软件硬生生的翻译了一 ...
- CRI 与 ShimV2:一种 Kubernetes 集成容器运行时的新思路
摘要: 关于 Kubernetes 接口化设计.CRI.容器运行时.shimv2.RuntimeClass 等关键技术特性的设计与实现. Kubernetes 项目目前的重点发展方向,是为开发 ...