poj 2481 Cows(线段树)
2016-07-13 18:49
260 查看
题目链接http://poj.org/problem?id=2481
题意:
区间包含的问题,也就是在二维笛卡尔坐标系中求一个顶点的左上方顶点中满足yj-xj>yi-xi的顶点的个数
思路:
线段树的单点更新区间查询问题。
求左上方的顶点个数,首先将所有坐标按照y降序x升序的方式进行排序。
这样每次插入一个结点,必然满足yi>=yi-1,xi<=xi-1,这里特殊处理一下就可以了。
线段树中需要维护在1-x中已经存在的点的个数sum(即满足条件的顶点个数)
另:此题数据较小,1e5,可以不进行离散化直接做(离散化可能花时间更长?)。如果数据量较大,应直接离散化再进行线段树的操作。
题意:
区间包含的问题,也就是在二维笛卡尔坐标系中求一个顶点的左上方顶点中满足yj-xj>yi-xi的顶点的个数
思路:
线段树的单点更新区间查询问题。
求左上方的顶点个数,首先将所有坐标按照y降序x升序的方式进行排序。
这样每次插入一个结点,必然满足yi>=yi-1,xi<=xi-1,这里特殊处理一下就可以了。
线段树中需要维护在1-x中已经存在的点的个数sum(即满足条件的顶点个数)
另:此题数据较小,1e5,可以不进行离散化直接做(离散化可能花时间更长?)。如果数据量较大,应直接离散化再进行线段树的操作。
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<cstdlib> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<vector> #include<map> using namespace std; #define lson rt<<1,l,mid #define rson rt<<1|1,mid+1,r typedef long long ll; const int INF=0x3f3f3f3f; const int maxn=1e5+10; int n; struct Point{ int x; int y; int id; bool operator < (const Point &p) const { return y>p.y||(y==p.y&&x<p.x); } }p[maxn]; int ans[maxn]; int sum[maxn<<2]; void Update(int rt,int l,int r,int pos){ sum[rt]++; if(l==r) return ; int mid=(l+r)>>1; if(pos<=mid) Update(lson,pos); else Update(rson,pos); } int Query(int rt,int l,int r,int L,int R){ if(L<=l&&r<=R) return sum[rt]; int mid=(l+r)>>1; int ans=0; if(L<=mid) ans+=Query(lson,L,R); if(R>mid) ans+=Query(rson,L,R); return ans; } int main(){ while(~scanf("%d",&n)&&n){ memset(sum,0,sizeof(sum)); memset(ans,0,sizeof(ans)); for(int i=0;i<n;i++){ scanf("%d%d",&p[i].x,&p[i].y); p[i].id=i; } sort(p,p+n); for(int i=0;i<n;i++){ if(i&&p[i].x==p[i-1].x&&p[i].y==p[i-1].y){ ans[p[i].id]=ans[p[i-1].id]; } else{ ans[p[i].id]=Query(1,1,100001,1,p[i].x+1); } Update(1,1,100001,p[i].x+1); } for(int i=0;i<n;i++){ printf("%d%c",ans[i],i==n-1?'\n':' '); } } return 0; }
相关文章推荐
- linux redhat分光盘 在vmware下的安装
- Linux基础(6)标准输入输出与重定向
- 错误“Error adding system: Data not available.”警告“GI output for inputsystem: 8589dc02183b182ccba8c3”的解决
- Sublime Text 2/3 常用快捷键
- spark streaming整合sparksql
- Hadoop与之对应的Hbase版本问题
- 在myeclipse上模拟servlet的生命周期
- 继承与多态
- DOM事件绑定与行为阻止
- Android 2016新技术
- 采样频率
- nyoj26 孪生素数 (用筛法 )
- [科普]局域网设置文件夹共享的方法
- spark-sql 安装,配置以及测试
- android 实现推送方式解决方案
- 警惕Java编译器中那些“蜜糖”陷阱
- spark函数讲解:aggregate
- 教你编译PHP7 (nginx+mysql+php7)
- 修改UINavigationController、UITabBarController、UITabBar、UIToolBar颜色
- u3d honey hex framework 代码解读记录(三)