首页 > 代码库 > UVA 11020(Efficient Solutions-multiset的lower_bound)
UVA 11020(Efficient Solutions-multiset的lower_bound)
C++的multiset,可重集:
S.lower_bound() 指向迭代器的第一个ai>=k的元素
S.upper_bound() 指向迭代器的第一个ai>k的元素
本题可化为:有n个点坐标(a,b)
一开始平面上没点,每次向其中加一个点,问每次有多少个点,没有在它左下角(不包括本点)(x‘<x,y‘<=y||x‘<=x,y‘<y)
如果P.a<A.a||(P.a==A.a&&P.b<A.b),则另P<A
显然一个点一次不符合条件,此后必不符合条件,且如果它可以删除B,在它左下角的点也可以删除
所以可以把不符合条件的点从点集中删除。
假设当前点集 A1<A2<..<An
那么分2种情况:
1:P不符合条件 舍去
2:P符合条件 删除P右上角的点
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<functional> #include<iostream> #include<cmath> #include<cctype> #include<ctime> #include<set> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define ForD(i,n) for(int i=n;i;i--) #define RepD(i,n) for(int i=n;i>=0;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (x<<1) #define Rson ((x<<1)+1) #define MEM(a) memset(a,0,sizeof(a)); #define MEMI(a) memset(a,127,sizeof(a)); #define MEMi(a) memset(a,128,sizeof(a)); #define INF (2139062143) #define F (100000007) #define MAXT (40+10) #define MAXN (15000+10) long long mul(long long a,long long b){return (a*b)%F;} long long add(long long a,long long b){return (a+b)%F;} long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;} typedef long long ll; struct Point { int a,b; Point(){} Point(int _a,int _b):a(_a),b(_b){} bool operator<(const Point& rhs) const { return a<rhs.a||(a==rhs.a&&b<rhs.b); } }; multiset<Point> S; multiset<Point>::iterator it; int n; int main() { // freopen("uva11020.in","r",stdin); // freopen(".out","w",stdout); int T; cin>>T; for(int t=1;t<=T;t++) { printf("Case #%d:\n",t); cin>>n; S.clear(); while(n--) { int a,b; scanf("%d%d",&a,&b); Point p=Point(a,b); it=S.lower_bound(p); //ai>=k if (it==S.begin()||(--it)->b>b) { S.insert(p); it=S.upper_bound(p); //ai>k while (it!=S.end()&&it->b >= b) S.erase(it++); } printf("%d\n",S.size()); } if (t^T) putchar('\n'); } return 0; }
UVA 11020(Efficient Solutions-multiset的lower_bound)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。