HDU-3255-Farming
来源:互联网 发布:淘宝床上四件套特价 编辑:程序博客网 时间:2024/05/22 23:34
求体积的一个比较好的题,由于m很小,直接枚举就行。
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int inf=1<<29;const int maxn=3e4+1000;const int maxm=maxn*8;struct Line{ int x1; int x2; int y; int flag; int pri; Line(){} Line(int sx1,int sx2,int sy,int spri,int sflag) { x1=sx1; x2=sx2; y=sy; pri=spri; flag=sflag; } bool operator < (const Line &l)const { if(y==l.y) return x1<l.x1; return y<l.y; }}L[maxn*2];struct Node{ int l; int r; int len; int cover;}t[maxm];int n,m,cnt,X[maxn*2],index[maxn*2],cntx,pri[4];void Build(int l,int r,int index){ t[index].l=l; t[index].r=r; t[index].len=t[index].cover=0; if(l==r) return ; int mid=(l+r)>>1; Build(l,mid,index<<1); Build(mid+1,r,index<<1|1);}void PushUp(int index){ if(t[index].cover>0) t[index].len=X[t[index].r+1]-X[t[index].l]; else if(t[index].l==t[index].r) t[index].len=0; else t[index].len=t[index<<1].len+t[index<<1|1].len;}void Update(int l,int r,int index,int val){ if(l>r) return; if(t[index].l==l&&t[index].r==r) { t[index].cover+=val; PushUp(index); return; } int mid=(t[index].l+t[index].r)>>1; if(r<=mid) Update(l,r,index<<1,val); else if(l>mid) Update(l,r,index<<1|1,val); else { Update(l,mid,index<<1,val); Update(mid+1,r,index<<1|1,val); } PushUp(index);}int main(){ int T,cas=1; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d",&pri[i]); cnt=cntx=0; for(int i=0;i<n;i++) { int x1,x2,y1,y2,s; scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&s); L[cnt++]=Line(x1,x2,y1,pri[s],1); L[cnt++]=Line(x1,x2,y2,pri[s],-1); X[cntx++]=x1; X[cntx++]=x2; } sort(X,X+cntx); cntx=unique(X,X+cntx)-X; sort(pri+1,pri+m+1); sort(L,L+cnt); long long ans=0; for(int i=1;i<=m;i++) { int scnt=0; Build(0,cntx,1); for(int j=0;j<cnt;j++) if(L[j].pri>=pri[i]) index[scnt++]=j; for(int j=0;j<scnt-1;j++) { int sl=lower_bound(X,X+cntx,L[index[j]].x1)-X; int sr=lower_bound(X,X+cntx,L[index[j]].x2)-X; sr--; Update(sl,sr,1,L[index[j]].flag); ans+=(long long)t[1].len*(L[index[j+1]].y-L[index[j]].y)*(pri[i]-pri[i-1]); } } printf("Case %d: %I64d\n",cas++,ans); } return 0;}
0 0
- hdu 3255 Farming
- HDU 3255 Farming
- Hdu 3255 Farming
- HDU 3255 Farming
- HDU-3255-Farming
- HDU 3255 Farming
- HDU 3255 Farming
- HDU 3255 Farming
- hdu 3255 Farming(扫描线)
- Farming - HDU 3255 扫描线
- hdu 3255 Farming 长方体扫描线
- HDU 3255 Farming(线段树:扫描线)
- Hdu 3255 Farming(长方形体积并)
- hdu 3255 Farming(矩形面积并 多种矩形)
- [线段树] hdu 3255 Farming#求体积并
- hdu 3255 Farming(线段树求长方体体积并)
- hdu 3255 Farming(扫描线、求立方体交)
- hdu 3255 Farming (线段树扫描线球体积并)
- 黑马程序员---笔记
- ACM 集训总结
- TX Lock的几种情况
- 多线程执行顺序
- uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)
- HDU-3255-Farming
- 机器学习:朴素贝叶斯算法
- Tomcat的安装与配置
- 3399: [Usaco2009 Mar]Sand Castle城堡
- 黑马程序员_Java RMI
- 表单 对数据库字段自动加密解密表单提交(THINKPHP3.2)
- HDU:A + B Problem II
- Android 线程学习之 Runnable和Thread的区别
- 黑马程序员_Java正则表达式