【线段树】 HDOJ 5091 Beam Cannon
来源:互联网 发布:手机淘宝服务中心 编辑:程序博客网 时间:2024/04/29 05:31
线段树+扫描线,线段树记录区间最大值就行了。。。
#include <iostream>#include <queue> #include <stack> #include <map> #include <set> #include <bitset> #include <cstdio> #include <algorithm> #include <cstring> #include <climits>#include <cstdlib>#include <cmath>#include <time.h>#define maxn 80005#define maxm 1005#define eps 1e-10#define mod 1000000007#define INF 999999999#define lowbit(x) (x&(-x))#define mp make_pair#define ls o<<1#define rs o<<1 | 1#define lson o<<1, L, mid #define rson o<<1 | 1, mid+1, R#pragma comment(linker, "/STACK:16777216")typedef long long LL;typedef unsigned long long ULL;//typedef int LL;using namespace std;LL qpow(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base;base=base*base;b/=2;}return res;}LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;}void scanf(int &__x){__x=0;char __ch=getchar();while(__ch==' '||__ch=='\n')__ch=getchar();while(__ch>='0'&&__ch<='9')__x=__x*10+__ch-'0',__ch = getchar();}LL gcd(LL _a, LL _b){if(!_b) return _a;else return gcd(_b, _a%_b);}// headstruct point{ int x, y;}p[maxn];int maxv[maxn << 2];int mark[maxn << 2];int n, w, h;int cmp(point a, point b){ return a.y < b.y;}void debug(void){ for(int i = 1; i <= n; i++) printf("%d %d BB\n", p[i].x, p[i].y);}void read(void){ scanf("%d%d", &w, &h); for(int i = 1; i <= n; i++) { scanf("%d%d", &p[i].x, &p[i].y); p[i].x += 20001; p[i].y += 20001; } sort(p+1, p+n+1, cmp);}void init(void){ memset(maxv, 0, sizeof maxv); memset(mark, 0, sizeof mark);}void pushdown(int o){ if(!mark[o]) return; maxv[ls] += mark[o]; maxv[rs] += mark[o]; mark[ls] += mark[o]; mark[rs] += mark[o]; mark[o] = 0;}void pushup(int o){ maxv[o] = max(maxv[ls], maxv[rs]);}void updata(int o, int L, int R, int ql, int qr, int x){ if(ql <= L && qr >= R) { maxv[o] += x; mark[o] += x; return; } pushdown(o); int mid = (L + R) >> 1; if(ql <= mid) updata(lson, ql, qr, x); if(qr > mid) updata(rson, ql, qr, x); pushup(o);}void work(void){ int ans = 0; for(int i = 1, j = 1; i <= n; i++) { updata(1, 1, 80001, p[i].x, p[i].x + w, 1); while(p[i].y - p[j].y > h) updata(1, 1, 80001, p[j].x, p[j].x + w, -1), j++; ans = max(ans, maxv[1]); } printf("%d\n", ans);}int main(void){ while(scanf("%d", &n), n >= 0) { init(); read(); work(); } return 0;}
0 0
- 【线段树】 HDOJ 5091 Beam Cannon
- hdu 5091 Beam Cannon(线段树)
- HDU 5091 Beam Cannon(线段树)
- hdu 5091 Beam Cannon(线段树)
- hdu 5091 Beam Cannon(线段树 + 扫描线)
- hdu 5091 Beam Cannon(线段树扫描线)
- HDU 5091 Beam Cannon(扫描线 + 线段树)
- hdu 5091 Beam Cannon (线段树+扫描线)
- hdu 5091 Beam Cannon 离散化+扫描线+线段树
- HDU 5091 Beam Cannon 线段树+扫描线
- hdu 5091 Beam Cannon(线段树) 矩形覆盖最多点
- HDOJ 5091 Beam Cannon 扫描线
- HDU5091 Beam Cannon(线段树扫描线)
- 【HDU5091】Beam Cannon,扫描线+线段树
- HDU 5091 Beam Cannon
- hdu 5091 beam cannon
- poj2482 Stars in Your Window hdu 5091 Beam Cannon 线段树 扫描线
- hdu 5091 Beam Cannon(线段树+扫描线+离散化)
- 澳门赌大小技巧,赌大小必赢技巧
- 澳门赌大小技巧,赌大小必赢技巧
- 关于多态的学习总结
- 澳门赌大小技巧,赌大小必赢技巧
- 命令行打包压缩方法
- 【线段树】 HDOJ 5091 Beam Cannon
- 南阳-NYIST十月份月赛-Problem L- 第三大
- 美国拉斯维加斯赌场介绍,网上拉斯维加斯赌场攻略
- 美国拉斯维加斯赌场介绍,网上拉斯维加斯赌场攻略
- 美国拉斯维加斯赌场介绍,网上拉斯维加斯赌场攻略
- 美国拉斯维加斯赌场介绍,网上拉斯维加斯赌场攻略
- 美国拉斯维加斯赌场介绍,网上拉斯维加斯赌场攻略
- 大学生第一份工作最常犯的错误
- 【二分匹配】 HDOJ 5093 Battle ships