日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU3255(线段树+扫描线)

發布時間:2024/4/11 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU3255(线段树+扫描线) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:http://acm.hdu.edu.cn/showproblem.php?pid=3255

?

題意:在一塊地上種蔬菜,對于同一塊地蔬菜價值高的一定是最后存活,求最后的蔬菜總值,也就是不同的矩形覆蓋,有的矩

形肯定在最上面。

?

#include <iostream> #include <string.h> #include <algorithm> #include <stdio.h>using namespace std; const int N = 160005;#define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1int cnt[N],M,v[N]; double D[N],sum[N];struct Line {double l,r,h;int s,v;Line(){}Line(double a,double b,double c,int d,int e):l(a),r(b),h(c),s(d),v(e){}bool operator< (const Line &cmp)const{return h<cmp.h;} }L[N],temp[N];int BinarySearch(double x) {int l,r,m;l=1;r=M;while(l<=r){m=(l+r)>>1;if(D[m]==x)return m;if(D[m]<x) l=m+1;else r=m-1;} }void Pushup(int l,int r,int rt) {if(cnt[rt]) sum[rt] = D[r+1] - D[l];else if(l==r) sum[rt]=0;else sum[rt]=sum[rt<<1]+sum[rt<<1|1]; }void Update(int x,int y,int z,int l,int r,int rt) {if(x<=l&&r<=y){cnt[rt]+=z;Pushup(l,r,rt);return ;}int mid=(l+r)>>1;if(x<=mid)Update(x,y,z,lson);if(y>mid)Update(x,y,z,rson);Pushup(l,r,rt); }int main() {int n,i,j,k,ca=1,l,r,m,ct,t;double ans,lx,ly,rx,ry;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);k=0;for(i=1;i<=m;i++)scanf("%d",&v[i]);for(i=1;i<=n;i++){scanf("%lf%lf%lf%lf%d",&lx,&ly,&rx,&ry,&r);D[++k]=lx;L[k]=Line(lx,rx,ly,1,v[r]);D[++k]=rx;L[k]=Line(lx,rx,ry,-1,v[r]);}sort(D+1,D+1+k);sort(L+1,L+1+k);M=1;for(i=2;i<=k;i++)if(D[i]!=D[i-1])D[++M]=D[i];ans=0;v[0]=0;sort(v,v+m+1);for(j=1;j<=m;j++){ct=0;for(i=1;i<=k;i++)if(L[i].v>v[j-1])temp[ct++]=L[i];memset(cnt,0,sizeof(cnt));memset(sum,0,sizeof(sum));for(i=0;i<ct-1;i++){l=BinarySearch(temp[i].l);r=BinarySearch(temp[i].r)-1;if(l<=r)Update(l,r,temp[i].s,1,M,1);ans+=sum[1]*(double)(v[j]-v[j-1])*(temp[i+1].h-temp[i].h);}}printf("Case %d: %.0lf\n",ca++,ans);}return 0; }


?

總結

以上是生活随笔為你收集整理的HDU3255(线段树+扫描线)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。