现实生活中,每一个IP段都指向一座城市。为了简化问题,我们将IP段直接看做一个整形数,每座城市也有自己的唯一标识ID,也可以看做一个整数。那么问题来了,现在已知有多个闭区间代表多个IP段,每个区间对应一个城市的ID。现在,小L要查询某个IP属于那个城市,希望聪明的你来帮他完成。
标签:cst include 查询 typedef code 区间 -- style ++
现实生活中,每一个IP段都指向一座城市。为了简化问题,我们将IP段直接看做一个整形数,每座城市也有自己的唯一标识ID,也可以看做一个整数。那么问题来了,现在已知有多个闭区间代表多个IP段,每个区间对应一个城市的ID。现在,小L要查询某个IP属于那个城市,希望聪明的你来帮他完成。
#include<cstdio> #include<algorithm> using namespace std; int n; typedef struct Node { int l,r,id; }Node; Node p[100007]; int cmp(const Node a,const Node b) { return a.l<b.l; } int search(int q) { if(q<p[0].l) return -1; int left=0,right=n-1; while(right>left) { int mid=(left+right+1)/2; if(q>=p[mid].l) { left=mid; } else { right=mid-1; } } return left; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d%d",&p[i].l,&p[i].r,&p[i].id); } sort(p,p+n,cmp); int l; scanf("%d",&l); int q; for(int i=0;i<l;i++) { scanf("%d",&q); int t=search(q); if(t==-1) puts("-1"); else if(p[t].r>=q) printf("%d\n",p[t].id); else puts("-1"); } } return 0; }
标签:cst include 查询 typedef code 区间 -- style ++
原文地址:http://www.cnblogs.com/ToTOrz/p/6066040.html