链接:
题意
n朵花,有n个花期,m个人在m个时间来,求每个时间有多少朵花
解:
通过差分确定一个时间段内的花数量
再通过离线查询(因为返回答案数组)进行记忆存储,只需要一次遍历
实际代码:
#include<bits/stdc++.h>
using namespace std;
vector<int> fullBloomFlowers(vector<vector<int>>& flowers, vector<int>& people)
{
map<int,int>cf;
for(const auto& flower:flowers)
{
cf[flower[0]]++;
cf[flower[1]+1]--;
}
vector<int>people_sort=people;
sort(people_sort.begin(),people_sort.end());
map<int,int>S2S;
int num=0;
auto it=cf.begin();
for(auto p:people_sort)
{
while(it!=cf.end() && it->first<=p)
{
num+=it->second;
it++;
}
S2S[p]=num;
}
vector<int>ans;
for(auto p:people)
{
ans.push_back(S2S[p]);
}
return ans;
}
限制:
1 <= flowers.length <= 5 * 104
flowers[i].length == 2
1 <= starti <= endi <= 109
1 <= people.length <= 5 * 104
1 <= people[i] <= 109