题目

分析

由于要求按时间顺序来操作,考虑整体二分:

对于一段二分出来的区间,将左区间的修改和右区间的查询取出来,每次更新每个查询的答案,正确性显然。

现在有一对修改和查询的操作(保证所有的查询都在修改之后),按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组】画矩形的更多相关文章

  1. JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语

    4273. [NOIP2015模拟10.28B组]圣章-精灵使的魔法语 (File IO): input:elf.in output:elf.out Time Limits: 1000 ms  Mem ...

  2. JZOJ 4272. 【NOIP2015模拟10.28B组】序章-弗兰德的秘密

    272. [NOIP2015模拟10.28B组]序章-弗兰德的秘密 (File IO): input:frand.in output:frand.out Time Limits: 1000 ms  M ...

  3. [JZOJ4272] [NOIP2015模拟10.28B组] 序章-弗兰德的秘密 解题报告(树形DP)

    Description 背景介绍弗兰德,我不知道这个地方对我意味着什么.这里是一切开始的地方.3年前,还是个什么都没见过的少年,来到弗兰德的树下,走进了封闭的密室,扭动的封尘已久机关,在石板上知道了这 ...

  4. 【JZOJ3886】【长郡NOIP2014模拟10.22】道路维护

    CCC 最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行 C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护 将C国抽象成一个无向图,定义 ...

  5. [JZOJ4274] [NOIP2015模拟10.28B组] 终章-剑之魂 解题报告(二进制)

    Description [背景介绍]古堡,暗鸦,斜阳,和深渊……等了三年,我独自一人,终于来到了这里……“终焉的试炼吗?就在这里吗?”我自言自语道.“终焉的试炼啊!就在这里啊!”我再一次自言自语道.“ ...

  6. 【长郡NOIP2014模拟10.22】搞笑的代码

    题目 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度<n do { 随机生成一个整数属 ...

  7. [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)( ...

  8. 【JZOJ3887】【长郡NOIP2014模拟10.22】字符串查询

    haf 给定n个字符串和q个询问 每次询问在这n个字符串中,有多少个字符串同时满足 1. 字符串a是它的前缀 2. 字符串b是它的后缀 100%数据满足n,q≤50000,字符串长度丌超过100,任意 ...

  9. 【JZOJ3885】【长郡NOIP2014模拟10.22】搞笑的代码

    ok 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度<n do { 随机生成一个整数属 ...

随机推荐

  1. java:easyui(jQueryEasyUI,分页)

    1.介绍: jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写复杂的ja ...

  2. JS对象—数组总结(创建、属性、方法)

    JS对象—数组总结(创建.属性.方法) 1.创建字符串 1.1 new Array() var arr1 = new Array(); var arr2 = new Array(6); 数组的长度为6 ...

  3. 【ABAP系列】SAP ABAP 动态指针

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 动态指针   ...

  4. tarjan缩点相关知识及代码

    emmm原谅我确实是找不到不用缩点的tarjan题才会想到自学一下缩点这个东西的.. 题目没有,只能自己出数据并手动模拟... 首先看一张图(懒得画,还是看输入数据吧,劳烦自行画图..) 7 9(n个 ...

  5. wget断点续传下载需要登录的网站上的大文件

    1 举个例子 xcode 2 方法 wget --load-cookies=cookies.txt  -c url -c是断点续传,如果网络断了,再运行该命令会接着最新的下载继续下载. --load- ...

  6. git reset –mixed –soft –hard命令解释。

    直接看官方的解释. 其中HEAD代表版本库,index代表暂存区,另外还有一个我们增删改代码的工作区.所以官方解释翻译过来就是: --hard : 回退版本库,暂存区,工作区.(因此我们修改过的代码就 ...

  7. python简介与简单入门

    1.计算机基础 计算机组成: 输入输出设备内. 存储器 .cpu .电源 .显卡 中央处理器(cpu) 处理各种数据 相当于人的大脑 内存 存储数据 相当于临时记忆 硬盘 存储数据 相当于人的永久记忆 ...

  8. 小白学习django第二站-模版配置

    上一站说道app创建,接下来我们来配置app的url路由 首先需要到setting.py中添加book这个app, 再到django_test文件里的urls添加路由 include() : 这个函数 ...

  9. flask中使用jsonify和json.dumps的区别

    一.实验 python的flask框架为用户提供了直接返回包含json格式数据响应的方法,即jsonify,在开发中会经常用到.如下一段简单的flask后端代码,服务端视图函数根据请求参数返回json ...

  10. NSIS打包软件使用

    NSIS打包软件使用 最近做的一个调用远程桌面的小应用需要打个安装包,并且在安装的时候需要添加注册表,我之前使用的都是"Advanced Installer"来打包应用程序的,这个 ...