手贱把i打成j,调了半天

/*
面积并转体积并,长方体高度为作物价格
算体积并:在笛卡尔坐标系的y轴上建立线段树cnt记录区间被完全覆盖的次数,sum记录区间被覆盖的总长度
以平行于xoy的平面从下往上扫描,把穿过扫描面的长方体的上下边加入集合segs,对集合segs里的边排序,然后一根扫描线从下往上扫描
另外,更新是不影响线段边界的
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<map>
#define ll long long
#define maxn 30000*2+10
#define lson l,m,rt<<1
#define rson m,r,rt<<1|1
using namespace std;
struct Seg{
int l,r,h,c;
Seg(){}
Seg(int a,int b,int c,int d):l(a),r(b),h(c),c(d){}
bool operator<(const Seg & a)const{
return h<a.h;
}
}segs[maxn];
struct cube{
int x1,y1,z1,x2,y2,z2;
cube(){}
cube(int a,int b,int c,int d,int e,int f):x1(a),y1(b),z1(c),x2(d),y2(e),z2(f){}
}cubes[maxn];
int seeds[],n,m;
int y[maxn<<],toty,tot;
int z[maxn],totz;
map<int,int>mp;
ll cnt[maxn<<],len[maxn<<];
void init(){
tot=toty=totz=;
mp.clear();
memset(cnt,,sizeof cnt);
memset(len,,sizeof len);
} inline void pushup(int rt,int l,int r){
if(cnt[rt]){
len[rt]=y[r]-y[l];
}
else if(l+==r) len[rt]=;
else len[rt]=len[rt<<]+len[rt<<|];
}
void update(int L,int R,int c,int l,int r,int rt){
if(L<=l && R>=r){
cnt[rt]+=c;
pushup(rt,l,r);
return;
}
int m=l+r>>;
if(L<m) update(L,R,c,lson);
if(R>m) update(L,R,c,rson);
pushup(rt,l,r);
}
int main(){
int T,a,b,c,d,e;
cin >> T;
for(int tt=;tt<=T;tt++){
init();
cin >> n >> m;
for(int i=;i<=m;i++)scanf("%d",&seeds[i]);
z[tot++]=;//把地平线加上!
for(int i=;i<=n;i++){
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
cubes[i]=cube(a,b,,c,d,seeds[e]);
z[totz++]=seeds[e];
y[toty++]=b;y[toty++]=d;
}
z[totz++]=;
sort(z,z+totz);totz=unique(z,z+totz)-z;//离散化z轴
sort(y,y+toty);toty=unique(y,y+toty)-y;//离散化x轴
for(int i=;i<toty;i++) mp[y[i]]=i; ll res=;
for(int i=;i<totz-;i++){
tot=;//初始化
memset(segs,,sizeof segs);
/* memset(cnt,0,sizeof cnt);
memset(len,0,sizeof len); */ for(int j=;j<=n;j++){//遍历所有cubes,把符合条件的加进去
if(cubes[j].z1<=z[i] && cubes[j].z2>=z[i+]){
segs[tot++]=Seg(cubes[j].y1,cubes[j].y2,cubes[j].x1,);
segs[tot++]=Seg(cubes[j].y1,cubes[j].y2,cubes[j].x2,-);
}
}
sort(segs,segs+tot);
for(int j=;j<tot;j++){
if(j!=)
res+=(ll)(z[i+]-z[i])*(segs[j].h-segs[j-].h)*len[];
update(mp[segs[j].l],mp[segs[j].r],segs[j].c,,toty-,); }
}
printf("Case %d: %lld\n",tt,res);
}
return ;
}

hdu3255扫描线:带权面积交转体积交的更多相关文章

  1. 51nod1459(带权值的dijkstra)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 题意:中文题诶- 思路:带权值的最短路,这道题数据也没 ...

  2. POJ 1703 Find them, Catch them(带权并查集)

    传送门 Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42463   Accep ...

  3. Java数据结构——带权图

    带权图的最小生成树--Prim算法和Kruskal算法 带权图的最短路径算法--Dijkstra算法 package graph; // path.java // demonstrates short ...

  4. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  5. [NOIP摸你赛]Hzwer的陨石(带权并查集)

    题目描述: 经过不懈的努力,Hzwer召唤了很多陨石.已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域.有电力喷射背包的ndsf很自豪,他认为搬陨石很容易,所以他将一些区域 ...

  6. poj1417 带权并查集 + 背包 + 记录路径

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2713   Accepted: 868 Descrip ...

  7. poj1984 带权并查集(向量处理)

    Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 5939   Accepted: 2 ...

  8. 【BZOJ-4690】Never Wait For Weights 带权并查集

    4690: Never Wait for Weights Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 88  Solved: 41[Submit][ ...

  9. hdu3038(带权并查集)

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 题意: n表示有一个长度为n的数组, 接下来有m行形如x, y, d的输入, 表示 ...

随机推荐

  1. Java项目怎么使用Swagger生成API文档?

    一.环境1. JAVA82. MAVEN 3.0.53. IDEA 2016.2.54. spring boot 1.4.1 <dependency> <groupId>io. ...

  2. GO语言的进阶之路-协程和Channel

    GO语言的进阶之路-协程和Channel 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 看过我之前几篇博客小伙伴可能对Golang语言的语法上了解的差不多了,但是,如果想要你的代码 ...

  3. Nginx 学习笔记(三)proxy_cache 缓存配置和ngx_cache_purge模块

    反向代理的缓存清理 一.proxy_cache配置 (1)如何配置和安装,都在这里了:https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Ng ...

  4. 神级程序员通过两句话带你完全掌握Python最难知识点——元类!

    千万不要被所谓"元类是99%的python程序员不会用到的特性"这类的说辞吓住.因为 每个中国人,都是天生的元类使用者 学懂元类,你只需要知道两句话: 道生一,一生二,二生三,三生 ...

  5. Cmder-控制台模拟器

    Cmder是一个软件包,由于在Windows上缺少漂亮的控制台模拟器而纯粹受挫. 它基于令人惊叹的软件,并采用Monokai配色方案和自定义快速布局,从一开始就看起来很性感. 首先,展示一下界面,和W ...

  6. C# 简单的反射机制实例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  7. Varish 缓存

    varish 缓存 2013年06月17日,Varnish Cache 3.0.4 发布,为目前最新版本. varish是以内存作为共享容器的:内存的大小决定了它的缓存容量.相对于主要以硬盘为存储的s ...

  8. c#中富文本编辑器Simditor带图片上传的全部过程(项目不是mvc架构)

    描述:最近c#项目中使用富文本编辑器Simditor,记录一下以便以后查看. 注:此项目不是MVC架构的. 1.引用文件 项目中引用相应的css和js文件,注意顺序不能打乱,否则富文本编辑器不会正常显 ...

  9. 公共模块定义/草案(Common Module Definition / draft - CMD草案)

    This specification addresses how modules should be written in order to be interoperable in browser-b ...

  10. C# List分页

    假设你每页10条数据当前是第3页 跳到第4页则:List.Skip((4-1)*10).Take(10) 本文来自SunShine,转载请标明出处: http://do.jhost.cn/sunshi ...