hdu4007
来源:互联网 发布:淘宝二手威图手机 编辑:程序博客网 时间:2024/06/02 02:47
不知道为什么数组开到2000才能过
#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<cmath>#define L(x) (x<<1)#define R(x) (x<<1|1)#define MAX 2010using namespace std;int cy[MAX*2];class line{public: int x,y1,y2,flag; line(){} line(int a,int b,int c,int d):x(a),y1(b),y2(c),flag(d) {} bool operator < (const line b)const { if(x!=b.x) return x<b.x; return flag>b.flag; }}lines[MAX*2];struct node{ int l,r,cover,max;}a[MAX*3];void build(int t,int l,int r){ a[t].l=l; a[t].r=r; a[t].cover=0; a[t].max=0; if(l==r)return; int mid=(l+r)>>1; build(L(t),l,mid); build(R(t),mid+1,r);}void update(int t,line s){ if(s.y1<=cy[a[t].l]&&cy[a[t].r]<=s.y2) { a[t].cover+=s.flag; a[t].max+=s.flag; return; } if(a[t].l==a[t].r)return; a[L(t)].cover+=a[t].cover; a[L(t)].max+=a[t].cover; a[R(t)].cover+=a[t].cover; a[R(t)].max+=a[t].cover; a[t].cover=0; int mid=(a[t].l+a[t].r)>>1; if(s.y1<=cy[mid]) update(L(t),s); if(s.y2>cy[mid]) update(R(t),s); a[t].max=max(a[L(t)].max,a[R(t)].max);}int main(){ int m,n,i,x,y; int numx,numy,numl; int ans; while(scanf("%d%d",&n,&m)!=EOF) { numx=0; numy=0; numl=0; ans=0; while(n--) { scanf("%d%d",&x,&y); cy[numy++]=y; cy[numy++]=y+m; lines[numl++]=line(x,y,y+m,1); lines[numl++]=line(x+m,y,y+m,-1); } sort(lines,lines+numl); sort(cy,cy+numy); numy=unique(cy,cy+numy)-cy; build(1,0,numy-1); for(i=0;i<numl;i++) { update(1,lines[i]); ans=max(ans,a[1].max); } printf("%d\n",ans); }}
- hdu4007
- hdu4007 线段树扫描线
- HDU4007 Dave 暴力 TWT Tokyo Olympic 2combo-1
- The 36th ACM/ICPC Asia Regional Dalian Site —— Online Contest hdu4007
- sql server 分区储存批量数据
- js 使用三
- ubuntu下eclipse集成OpenCv
- Python 发送Email
- 简单CMS项目笔记之二:前台页面处理流程
- hdu4007
- usb 安装win7找不到 驱动程序!CD/DVD驱动器程序
- VS2010下配置Bullet开发环境
- Android SDK目录结构和工具介绍
- nginx 配置二
- Flex Effect
- 交叉编译tcpdump ,让其可以在mips环境下运行
- Python算法 折半搜索算法(二分法)
- 我的25年嵌入式生涯-周立功