【JZOJ 3893】 画矩形
来源:互联网 发布:广州知不足幼儿园官网 编辑:程序博客网 时间:2024/05/16 23:50
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
什么情况下可以将操作按时间分治?
- 可以离线
- 修改操作互相独立
- 各个修改对答案的贡献互不影响
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;}
0 0
- 【JZOJ 3893】 画矩形
- 【JZOJ 3893】画矩形
- 画矩形
- 画矩形
- openCV 画矩形框或填充矩形
- openCV 画矩形框或填充矩形
- openCV 画矩形框或填充矩形
- mapx 画矩形
- 画矩形 RECT FillRect
- JS画矩形
- 引用 OpenCV画矩形
- Win32 画矩形
- 画直线,矩形
- php 画矩形图
- CBrush实现画矩形
- 随机画矩形
- 画一个矩形程序
- AndEngine_example1.2 画矩形
- Tomcat+MyEclipse 动态资源开发及部署
- Http协议及如何请求 快速入门
- 动态顺序表的实现,插入删除查找修改...
- NC5X单据列表多选控制
- 蓝桥杯题—BASIC-1闰年判断 BASIC-2 01字串 BASIC-3 字母图形
- 【JZOJ 3893】 画矩形
- nyoj971爬行的蚂蚁
- LeetCode 398. Random Pick Index
- user operation is waiting /maven卡死
- hdu 2112
- 求素数
- 30.变量的赋值和销毁
- windows PE 问题集锦
- Linux Make(Makefile)由浅入深的学习与示例剖析