题意:完全被其它区间包括在内的区间有几个?
类似将前面元素放入优先队列的方法。先将元素按pair排序。因为数据中所有的左右端点(记为[x,y])都不同。因此循环到第i个元素时,x比它小的都在它左边,因此它只能被左边的元素包括,用maxv记录它左边元素最大的右端点,如果maxv>第i个元素的y,就能。
如果这题x,y能重复。那么y要从大到小排列。
#pragma comment(linker,"/STACK:1024000000,1024000000") #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <iomanip> #include <cstring> #include <map> #include <queue> #include <set> #include <cassert> #include <list> #define mkp make_pair using namespace std; const double EPS=1e-8; const int SZ=33,INF=0x7FFFFFFF; const long long mod=19999997; typedef long long lon; int main() { std::ios::sync_with_stdio(0); //freopen("d:\\1.txt","r",stdin); lon casenum; //cin>>casenum; //scanf("%d",&casenum); //for(lon time=1;time<=casenum;++time) //for(lon time=1;cin>>n;++time) { lon n; cin>>n; vector<pair<int,int>> vct; for(int i=0;i<n;++i) { int x,y; cin>>x>>y; vct.push_back(mkp(x,y)); } sort(vct.begin(),vct.end()); int maxv=-1,res=0; for(int i=0;i<n;++i) { if(maxv>=vct[i].second) { ++res; } maxv=max(maxv,vct[i].second); } cout<<res<<endl; } return 0; }