CodeForces 652D Nested Segments(树状数组+离散化)
来源:互联网 发布:昆山编程培训要多久 编辑:程序博客网 时间:2024/05/18 20:09
题意:给你n条线段,保证端点不完全重合,问每条线段包含了多少条线段。
思路:只有最多2e5个线段,所以我们可以先离散化一下。然后将每条线段都按左端点排序,将每个线段的右端点用树状数组维护,那么就可以直接扫一遍,由于左端点已经是有序的了,i+1的线段不会包含i,所以还需要将i线段的右端点删除,当然需要注意的是如果左端点相同,排序的时候要按右端点大的来排序,自己画个图就知道了
#include<bits/stdc++.h>using namespace std;const int maxn = 4e5+100;struct Node{int l,r,id,ans;}se[maxn];int c[maxn];vector<int>v;bool cmp(Node a,Node b){if(a.r==b.r)return a.l<b.l;if(a.l==b.l)return a.r>b.r;return a.l<b.l;}bool cmp1(Node a,Node b){return a.id<b.id;}int getid(int x){return lower_bound(v.begin(),v.end(),x)-v.begin()+1;}int lowbit(int x){return x&(-x);}void update(int i,int d){while(i<=maxn){c[i]+=d;i+=lowbit(i);}}int query(int i){int ans = 0;while(i){ans+=c[i];i-=lowbit(i);}return ans;}int main(){ int n;scanf("%d",&n);for(int i = 1;i<=n;i++){scanf("%d%d",&se[i].l,&se[i].r);se[i].id=i;v.push_back(se[i].l),v.push_back(se[i].r);}sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end()); for(int i= 1;i<=n;i++) se[i].l=getid(se[i].l),se[i].r=getid(se[i].r);sort(se+1,se+1+n,cmp);for(int i = 1;i<=n;i++)update(se[i].r,1);for(int i = 1;i<=n;i++){ se[i].ans = query(se[i].r)-1;update(se[i].r,-1);}sort(se+1,se+1+n,cmp1);for(int i = 1;i<=n;i++)printf("%d\n",se[i].ans);}
0 0
- CodeForces 652D Nested Segments(树状数组+离散化)
- CodeForces 652D Nested Segments(离散化,树状数组)
- Codeforces 652D Nested Segments 【树状数组 + 离散化】
- 【Codeforces 652 D Nested Segments】+ 树状数组 + 离散化
- Codeforces 652D Nested Segments【离散化+思维+树状数组】
- Nested Segments codeforces 652D 树状数组 +离散化
- CodeForces 652D Nested Segments(树状数组 离散化)
- Nested Segments CodeForces 652D 树状数组+离散化
- CodeForces 652D Nested Segments 树状数组
- CodeForces 652D Nested Segments (树状数组)
- Code Forces 652D Nested Segments(离散化+树状数组)
- Educational Codeforces Round 10 D. Nested Segments 离散化+树状数组
- Codeforces 652D Nested Segments 树状数组离线处理
- CodeForce 652D Nested Segments 树状数组
- 初识树状数组 Educational Codeforces Round 10 D - Nested Segments
- codeforces 652D Nested Segments
- codeforces_652D. Nested Segments(树状数组、二分)
- Codeforces-652D : Nested Segments(线段树)
- TYVJ 2009「Poetize8」Lagoon
- 第十六天:9.1规划人力资源管理。
- 字符串逆序输出
- 学习javaee第四天的加强训练
- UIViewContentMode 图片显示模式
- CodeForces 652D Nested Segments(树状数组+离散化)
- 在ST官网下载STM32F10x_StdPeriph_Lib固件库
- UNIX_TIMESTAMP 与 FROM_UNIXTIME
- CentOS单机安装FastDFS
- "Android中的访问网络"-Android面试必问"精华技能点"汇总
- 光栅化
- cnn 学习笔记 2
- Tomcat工作原理详解
- springmvc mybatis 手动提交事务