C. Covered Points Count(线段覆盖,差分)
发布日期:2021-06-30 10:17:46 浏览次数:2 分类:技术文章

本文共 532 字,大约阅读时间需要 1 分钟。

这题真的坑啊

比较好想的做法是把利用差分的思想,把所有区间存进map里

左端点就在对应的位置加加表示多了线段,右端点就减减

最后从左到右扫一遍所有端点,动态维护每两个端点间的线段数累加

#include 
using namespace std;typedef long long ll;const int maxn=2e5+10;map
mp;map
::iterator it;ll cnt[maxn],n,l,r; int main(){ cin>>n; for(int i=1;i<=n;i++) { cin>>l>>r; mp[l]++,mp[r+1]--; } it = mp.begin(); ll last=it->first,ans=it->second;//区间起点和答案 it++; for(;it!=mp.end();it++ ) { cnt[ans]+=it->first-last; last=it->first; ans+=it->second; } for(int i=1;i<=n;i++) cout<
<<" "; return 0;}

转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/107084322 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:B. MADMAX(记搜+博弈)
下一篇:D. Two Strings Swaps(分类)

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月06日 02时28分57秒