【NOIP2014模拟10.25A组】画矩形
题目
分析
由于要求按时间顺序来操作,考虑整体二分:
对于一段二分出来的区间,将左区间的修改和右区间的查询取出来,每次更新每个查询的答案,正确性显然。
现在有一对修改和查询的操作(保证所有的查询都在修改之后),按x坐标排序,将矩形拆成左右两条线,用扫描线,树状数组维护,更新答案。
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=200005;
using namespace std;
struct ddx
{
	int be,k,x,x1,y1,v;
}d[N];
int n,re[N][8],ans[N],sum[N+N],tot;
bool cmp(ddx x,ddx y)
{
	if(x.x!=y.x)
		return x.x<y.x;
	else
		return x.k<y.k;
}
int to(int x)
{
	return x&-x;
}
int add(int x,int v)
{
	x+=2;
	while(x<=N)
	{
		sum[x]+=v;
		x+=to(x);
	}
}
int find(int x)
{
	x+=2;
	int num=0;
	while(x)
	{
		num+=sum[x];
		x-=to(x);
	}
	return num;
}
int dg(int l,int r)
{
	if(l==r) return 0;
	int mid=(l+r)/2;
	dg(l,mid);
	dg(mid+1,r);
	tot=0;
	for(int i=l;i<=mid;i++)
		if(!re[i][0])
		{
			d[++tot].x=re[i][1];
			d[tot].x1=re[i][2];
			d[tot].y1=re[i][4];
			d[tot].k=0;
			d[tot].v=1;
			d[tot].be=i;
			d[++tot].x=re[i][3];
			d[tot].x1=re[i][2];
			d[tot].y1=re[i][4];
			d[tot].k=2;
			d[tot].v=-1;
			d[tot].be=i;
		}
	for(int i=mid+1;i<=r;i++)
		if(re[i][0])
		{
			d[++tot].k=1;
			d[tot].x=re[i][1];
			d[tot].x1=re[i][2];
			d[tot].be=i;
		}
	sort(d+1,d+1+tot,cmp);
	for(int i=1;i<=tot;i++)
	{
		if(!d[i].k)
		{
			add(d[i].x1,d[i].v);
			add(d[i].y1+1,-d[i].v);
		}
		else
		if(d[i].k==2)
		{
			add(d[i].x1,d[i].v);
			add(d[i].y1+1,-d[i].v);
		}
		else
			ans[d[i].be]+=find(d[i].x1);
	}
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=2;j++) scanf("%d",&re[i][j]);
		if(!re[i][0]) scanf("%d%d",&re[i][3],&re[i][4]);
	}
	dg(1,n);
	for(int i=1;i<=n;i++)
		if(re[i][0])
			printf("%d\n",ans[i]);
}
【NOIP2014模拟10.25A组】画矩形的更多相关文章
- JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语
		4273. [NOIP2015模拟10.28B组]圣章-精灵使的魔法语 (File IO): input:elf.in output:elf.out Time Limits: 1000 ms Mem ... 
- JZOJ 4272. 【NOIP2015模拟10.28B组】序章-弗兰德的秘密
		272. [NOIP2015模拟10.28B组]序章-弗兰德的秘密 (File IO): input:frand.in output:frand.out Time Limits: 1000 ms M ... 
- [JZOJ4272] [NOIP2015模拟10.28B组] 序章-弗兰德的秘密 解题报告(树形DP)
		Description 背景介绍弗兰德,我不知道这个地方对我意味着什么.这里是一切开始的地方.3年前,还是个什么都没见过的少年,来到弗兰德的树下,走进了封闭的密室,扭动的封尘已久机关,在石板上知道了这 ... 
- 【JZOJ3886】【长郡NOIP2014模拟10.22】道路维护
		CCC 最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行 C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护 将C国抽象成一个无向图,定义 ... 
- [JZOJ4274] [NOIP2015模拟10.28B组] 终章-剑之魂 解题报告(二进制)
		Description [背景介绍]古堡,暗鸦,斜阳,和深渊……等了三年,我独自一人,终于来到了这里……“终焉的试炼吗?就在这里吗?”我自言自语道.“终焉的试炼啊!就在这里啊!”我再一次自言自语道.“ ... 
- 【长郡NOIP2014模拟10.22】搞笑的代码
		题目 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度<n do { 随机生成一个整数属 ... 
- [JZOJ6011] 【NOIP2019模拟1.25A组】天天爱跑步
		题目 描述 题目大意 给你平面直角坐标系上的nnn个起点和nnn个终点,(x,y)(x,y)(x,y)每次只能走到(x,y+x)(x+y,y)(x,y−x)(x−y,y)(x,y+x)(x+y,y)( ... 
- 【JZOJ3887】【长郡NOIP2014模拟10.22】字符串查询
		haf 给定n个字符串和q个询问 每次询问在这n个字符串中,有多少个字符串同时满足 1. 字符串a是它的前缀 2. 字符串b是它的后缀 100%数据满足n,q≤50000,字符串长度丌超过100,任意 ... 
- 【JZOJ3885】【长郡NOIP2014模拟10.22】搞笑的代码
		ok 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度<n do { 随机生成一个整数属 ... 
随机推荐
- 采用WPF技术开发截图程序
			前言 QQ.微信截图功能已很强大了,似乎没必要在开发一个截图程序了.但是有时QQ热键就是被占用,不能快速的开启截屏:有时,天天挂着QQ,领导也不乐意.既然是程序员,就要自己开发截屏工具,功能随心所欲 ... 
- 浅谈 MySQL的预编译
			之前的一篇 Mybatis中 #{}和${}的区别 中涉及到通过 SQL预编译和 #{} 传值 的方式防止SQL注入. 由此引发了想了解预编译的想法.那么什么是预编译那? 一.三个阶段: 词法和语义解 ... 
- Docker 容器操作
			1. 创建并运行 一个容器 docker run -it --rm centos:latest bash run 运行容器 -it 以交互方式运行容器 --rm 退出容器后删除容器 cen ... 
- python基础--面向对象初始
			# 类与对象,类是类别.种类,是面向对象设计中最重要的概念, # 对象是特征与技能的结合体, # 类是一系列对象相似特征与技能的结合体 # 例如:人是一个类,而我本人是一个对象,手,脚,是我的特征, ... 
- MVC学习途径
			博客园专题:http://kb.cnblogs.com/zt/mvc/ MVC源码:http://www.codeplex.com/site/search?projectSearchText=mvc ... 
- idea常用快捷键列表
			在使用IntelliJ Idea的时候,使用快捷键是必不可少的.掌握一些常用的快捷键能大大提高我们的开发效率.有些快捷键可以熟练的使用,但是还有另外一些快捷键虽然很好用,但是由于因为没有形成使用习惯或 ... 
- sql中生成随机字符串的function
			create or replace function random_string(integer) returns text as $body$ ))::) , $)), ''); $body$ la ... 
- Microsoft BarCode Control 16.0属性
			Labview(2018)可通过Active调用Microsoft BarCode Control 16.0来生成条形码, 参考资料如下: 生成效果: 二维码: 条形码: 执行程序发现修改线条宽度不影 ... 
- 洛谷 P3857 彩灯 题解
			题面 对于每一个开关,我们可以看成一个0/1串,初始是一个全部为0的串,要求经过这些开关的操作后,出现的不同的0/1串的个数 建模就是存在一些数,这些数异或起来是0(等价于没有操作).那么需要求一个集 ... 
- List<HashMap<String,String>> list, 根据hashmap中的某个键的值排序
			来源https://blog.51cto.com/zhaodan/1725249 //可以使用Collections.sort(List list, Comparator c)来实现 这里举例hash ... 
