Description



Time Limits: 2000 ms Memory Limits:262144 KB

Analysis

比赛时打了树状数组套线段树,巨大常数卡空间卡时间40分(可是理论复杂度是nlog^2的啊),看这数据范围就是要卡树套树的
然而这是一个经典模型,之前某篇题解写过:传送门
这题的区别是有动态加点操作,所以不能像那题一样直接快排

按时间分治

我们将操作按时间分治(不知道是不是CDQ分治)
那么对于一段操作区间[L,R]
将[L,mid]中的插入点操作来更新[mid+1,R]中的询问操作
这就是套路,参见链接中的题解,树状数组nlogn
总复杂度nlog^2
正确性显然

summary

什么情况下可以将操作按时间分治?

  1. 可以离线
  2. 修改操作互相独立
  3. 各个修改对答案的贡献互不影响

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int N=200005;
int n,m,num,lim,BIT[N],ans[N];
struct op
{int tp,x1,y1,x2,y2;
}b[N];
struct lyd
{int x,y,z,id;
}a[N*4],c[N*4];
bool cmp(lyd a,lyd b)
{return a.y>b.y;
}
int lowbit(int x)
{return x&-x;
}
int get(int x)
{int t=0;for(int i=x;i;i-=lowbit(i)) t+=BIT[i];return t;
}
void add(int x,int z)
{for(int i=x;i<=lim;i+=lowbit(i)) BIT[i]+=z;
}
void divide(int l,int r)
{if(l==r) return;int mid=(l+r)>>1;n=0;fo(i,l,mid)if(b[i].tp==0){a[++n].x=b[i].x2,a[n].y=b[i].y2,a[n].z=1;a[++n].x=b[i].x2,a[n].y=b[i].y1-1,a[n].z=-1;a[++n].x=b[i].x1-1,a[n].y=b[i].y2,a[n].z=-1;a[++n].x=b[i].x1-1,a[n].y=b[i].y1-1,a[n].z=1;}sort(a+1,a+n+1,cmp);m=0;fo(i,mid+1,r)if(b[i].tp==1) c[++m].x=b[i].x1,c[m].y=b[i].y1,c[m].id=i;sort(c+1,c+m+1,cmp);int j=1;fo(i,1,m){while(j<=n && a[j].y>=c[i].y) add(a[j].x,a[j].z),j++;ans[c[i].id]+=get(lim)-get(c[i].x-1);}while(--j) add(a[j].x,-a[j].z);divide(l,mid);divide(mid+1,r);
}
int main()
{scanf("%d",&num);fo(i,1,num){scanf("%d %d %d",&b[i].tp,&b[i].x1,&b[i].y1),b[i].x1+=2,b[i].y1+=2;if(b[i].tp==0) scanf("%d %d",&b[i].x2,&b[i].y2),b[i].x2+=2,b[i].y2+=2;lim=max(lim,max(b[i].x1,b[i].y1));lim=max(lim,max(b[i].x2,b[i].y2));}lim++;divide(1,num);fo(i,1,num)if(b[i].tp) printf("%d\n",ans[i]);return 0;
}

【JZOJ 3893】 画矩形相关推荐

  1. python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框

    最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测.于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是: 1.在视 ...

  2. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  3. python opencv 画矩形框 外接矩形

    画矩形 import cv2 image = cv2.imread('1.jpg') cv2.rectangle(image, (xmin, ymin), (xmax, ymax), (0, 0, 2 ...

  4. OpenGL画矩形函数:glRectf,四个参数分别表示了位于对角线(左下到右上)上的两个点的横纵坐标

    OpenGL画矩形函数:glRectf glRectf:画一个矩形,四个参数分别表示了位于对角线(左下到右上)上的两个点的横纵坐标(并且以窗口的中心点为原点,相当于以它为原点建立了一个二维坐标系) 例 ...

  5. opencv鼠标操作,画矩形

    opencv鼠标操作,画矩形 效果图 主要两个函数在作用 //-------------------全局函数声明部分------------------------- //描述:全局函数的声明 //- ...

  6. 用ANSYS画矩形_用SolidWorks画一个换挡杆防尘罩,此图建了10个基准面,颇为麻烦...

    此图是用SolidWorks2015建模,用KeyShot 8渲染.SW文件在2019年11月8日文件夹.这个图新建了10个基准面,画了9个矩形和一个圆,这种画法有点麻烦还有待改进. 建模步骤: 1. ...

  7. Qt与OpenCV编程:在QLabel加载的图像上画矩形并剪切

    前言 1.使用Qt与OpenCV做开发时,时常会用到鼠标与图像交互这块,OpenCV有自己的鼠标事件,但要在Qt搭建的界面上是不能使用OpenCV封装的鼠标事件,Qt有自己的鼠标事件. 2.Qt鼠标事 ...

  8. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...

  9. opencv画矩形以及在图像上放文字

    转自python下的opencv画矩形和文字注释https://blog.csdn.net/alansss/article/details/84978672 1. 画矩形 函数调用:cv2.recta ...

最新文章

  1. 短序列拼接软件velvet简介
  2. linux存储--页面置换算法(十一)
  3. 一篇文章弄懂Java多线程基础和Java内存模型
  4. 把所有圆圈连接起来的游戏_20个幼儿园体育小游戏教程
  5. 惠新宸php教程_百度PHP高级顾问惠新宸:PHP在百度的发展历程
  6. spring-注解实现入门
  7. 超级硬盘数据恢复软件v2.7.2.6_电脑磁盘上的视频误删如何恢复?误删视频恢复教程...
  8. 优秀java程序员-利器-eclipse-01 快捷键
  9. c++通过pybind11制作模型python接口,生成python调用包
  10. 混日子的老程序员感受结对编程的威力【工作效率狂提高】
  11. mysql jemalloc_安装 jemalloc for mysql
  12. 中国平板显示产业运行状况及前景规划建议报告2022-2027年版
  13. 计算机指法基础知识,电脑打字基础知识及打字指法
  14. java pdf 套打_itext生成发票套打(操作PDF)
  15. 4月20日第壹简报,星期四,农历三月初一,谷雨
  16. 厌学孩子如何进行心理疏导[为本教育]
  17. 2022-2027年中国共享自行车行业发展监测及投资战略研究报告
  18. Android Webview完美支持播放各种视频。(解决无法播放优酷视频的问题以及周末无法播放优酷视频的问题)
  19. 洲思zCloud公有云版发布
  20. 一周Springboot+Vue入门(1)-- 什么是Springboot

热门文章

  1. AI 芯片发展的前世今生
  2. 360黑匣子之谜——奇虎360“癌”性基因大揭秘
  3. 部署企业版lync2013之四:持久聊天
  4. 阿里巴巴张勇谈商业文明:让更多小草能长成参天大树
  5. Java方法的概述、格式说明和调用
  6. 数据库技术产品生态图
  7. oracle10g win7下使用命令启动服务和实例
  8. 对我们来说,如何避免成为一个油腻的产品经理?
  9. 【Linux工具】使用nc命令在两台服务器之间传输大文件(无须密码等繁琐操作)
  10. 求职简历应该怎么填写受HR喜爱?HR喜欢邮箱格式应该怎么写?