HDU5862(树状数组好题)
来源:互联网 发布:树莓派 gpio 编程 编辑:程序博客网 时间:2024/06/08 06:52
题意:给一些平行坐标轴的线段,。统计相交数
题解:可以这样考虑,把所有与x轴平行的线段存起来,用来枚举。把与y轴平行的线段的左右端点存起来。这样在枚举x线段时。就需要看x线段的左端点左边有多少,右端点有多少,相减就是中间重合的。如何维护这些数据呢?当然就得用树状数组了。,简单粗暴
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>#include<stack>#include<queue>#include<vector>#include<set>#include<map>#include<string>using namespace std;typedef long long ll;typedef pair<int,int>P;const int INF=0x3f3f3f3f;const ll INFF=0x3f3f3f3f3f3f3f3f;const double pi=acos(-1.0);const double eps=1e-9;ll bit[200010];struct node1{ int x1,x2,y; int id;}node[200010];int ax[200010];bool cmp(node1 p1,node1 p2){ if(p1.y!=p2.y) return p1.y<p2.y; return p1.id>p2.id;}ll sum(int i){ ll ans=0; while(i) { ans+=bit[i]; i-=(i&-i); } return ans;}void add(int i,int x,int len){ while(i<=len) { bit[i]+=x; i+=i&(-i); }}int main(){ int t;scanf("%d",&t); while(t--) { int n;scanf("%d",&n); int cnt=0,tmp=0; for(int i=1;i<=n;i++) { int x1,x2,y1,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2); if (x1 > x2) swap(x1, x2); if (y1 > y2) swap(y1, y2); if(x1==x2) { ax[cnt++]=x1; node[tmp].x1=x1;node[tmp].y=y1;node[tmp++].id=1; node[tmp].x1=x2;node[tmp].y=y2;node[tmp++].id=-1; } else { ax[cnt++]=x1;ax[cnt++]=x2; node[tmp].x1=x1; node[tmp].x2=x2; node[tmp].y=y2; node[tmp++].id=0; } } sort(ax,ax+cnt); int len=unique(ax,ax+cnt)-ax; sort(node,node+tmp,cmp); memset(bit,0,sizeof(bit)); ll ans=0; for(int i=0;i<tmp;i++) { if(node[i].id==0) { int l=lower_bound(ax,ax+len,node[i].x1)-ax+1; int r=lower_bound(ax,ax+len,node[i].x2)-ax+1; ans+=sum(r)-sum(l-1); } else { int l=lower_bound(ax,ax+len,node[i].x1)-ax+1; add(l,node[i].id,len+1); } } printf("%lld\n",ans); } return 0;}
阅读全文
1 0
- HDU5862(树状数组好题)
- hdu5862树状数组 离散化
- hdu5862树状数组加扫描线
- poj1990(树状数组好题)
- 树状数组好题(codeforces828E)
- 树状数组(好)-poj1990
- hdu 4605(离线 + dfs + 树状数组(好题))
- 蓝桥杯 小朋友排队 (树状数组好题)
- hdu 4031 树状数组 好题
- 树状数组uva1513(好)
- POJ 2352 Stars (树状数组)(模拟)(好题)
- [ZOJ2112][可持久化线段树(主席树)][树状数组]Dynamic Rankings[好题]
- poj Matrix 2155 (树状数组&&二维线段树) 好题
- fzoj 2236 第十四个目标 (树状数组&LIS&dp)好题
- [BZOJ]4430: [Nwerc2015]Guessing Camels赌骆驼 树状数组(思路好题)
- hdu 2492 ping pong 树状数组好题
- HDU 5892 Resident Evil(二维树状数组,好题)
- HDU-4991-Ordered Subsequence【树状数组】【动态规划】【好题】
- TCP,IP,HTTP,SOCKET区别和联系
- Android实现简单的拍照功能
- linux学习之旅(五)&用户初探
- 多媒体(视频)
- 自用(Mybatis配置jar和超详细的笔记)
- HDU5862(树状数组好题)
- Python中的注解“@”
- HDU-2077-汉诺塔IV
- VideoView与SurfaceView的使用
- (类变量)静态变量和实例变量的区别?
- Linux搭建tor网络环境
- MySQL delete嵌套子查询问题
- 自用(Hibernate配置文件和jar包和详细笔记)
- JAVA 攻城狮 第二十二天