博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 1000C Covered Points Count 【前缀和优化】
阅读量:4551 次
发布时间:2019-06-08

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

 想到这道题的解法是建个数组,每读入一条线段进来,就把这线段上的每个点+1,最后扫一遍数组算出count数组,这么做的复杂度是n*max(a[i]);简单用前缀和优化,复杂度变为n+max(a[i])还是过不了。我们想到a[i]是10^18级别的,而n最大200000,所以可以想象出这个前缀和数组里面大多数都是0(有很多是零的连续区间),然后每个0的连续区间维护出来的前缀和都是一样的【很多的计算力耗费在这个上面了】,所以我们想到只考虑不是0的地方,然后新的不是0的地方和上一个不是0的地方之间的点被线段覆盖次数是一样的。不是0的地方有n级别个,由于我们用map维护(要把所有端点从左到右排序),所以O(nlogn)复杂度。

map的遍历看代码

#include
#include
using namespace std;map
m;long long count[200005];int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ long long start,end; scanf("%lld%lld",&start,&end); m[start]++; m[end+1]--; } long long last=0; int cnt=0; //考虑每个区间 for( map
::iterator it = m.begin(); it!=m.end(); it++){
if( it==m.begin() ) { last=it->first; cnt+=it->second; continue; } count[ cnt ] += it->first - last; last=it->first; cnt+=it->second; } for(int i=1;i<=n;i++) cout<
<<" "; return 0;}

 

转载于:https://www.cnblogs.com/ZhenghangHu/p/9239757.html

你可能感兴趣的文章
23种设计模式中的命令模式
查看>>
[转载]年薪10w和年薪100w的人,差在哪里?
查看>>
shell 日期参数
查看>>
package的使用
查看>>
括号生成
查看>>
优秀的前端需要做到什么?
查看>>
aws cli command line interface的安装与使用
查看>>
10)将地址换成常量
查看>>
cocos2d-x3.0 解释具体的新的物理引擎setCategoryBitmask()、setContactTestBitmask()、setCollisionBitmask()...
查看>>
Cocos2d-x
查看>>
FIR滤波器设计
查看>>
1005 继续(3n+1)猜想 (25 分)
查看>>
【Uva 1252】Twenty Questions
查看>>
1_访问命令行
查看>>
File操作相关
查看>>
Linux:文本处理工具
查看>>
java,for穷举,经典题目,百鸡百钱
查看>>
mysql提示Column count doesn't match value count at row 1错误
查看>>
前端--jstree--异步加载数据
查看>>
CSS定位深入理解 完全掌握CSS定位 相对定位和绝对定位
查看>>