题意:
给n个区间 [x,y],问被最多覆盖的点,,被覆盖了多少次。
思路:
一个很巧妙的方法。好像原来有接触过。
就是如果给你[1,3]就used[1]++,used[4]–。
然后从左到又过一遍出现的点 依次累加每次加的时候取最大值。
然后这题需要用到map离散化。
代码:
#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algorithm"#include"iostream"#include"map"#include"stack"#include"vector"#define ll __int64#define inf -999999999999999999LLusing namespace std;int a[123456],b[123456];int main(){int t;cin>>t;while(t–){int cnt=1;int n;scanf("%d",&n);memset(a,0,sizeof(a));map<int,int>mp;while(n–){int x,y;scanf("%d%d",&x,&y);y++;if(!mp[x]){b[cnt]=x;mp[x]=cnt++;}if(!mp[y]){b[cnt]=y;mp[y]=cnt++;}a[mp[x]]++;a[mp[y]]–;}sort(b+1,b+1+cnt);int sum=0,ans=0;for(int i=1;i<cnt;i++){sum+=a[mp[b[i]]];ans=max(sum,ans);}printf("%d\n",ans);}return 0;}
关于爱情简短的句子