JZOJ 4911 【NOIP2017模拟12.3】人生的叹息

阅读: 评论:0

JZOJ 4911 【NOIP2017模拟12.3】人生的叹息

JZOJ 4911 【NOIP2017模拟12.3】人生的叹息

人生的叹息

题目大意

给出一个长度为 n 的序列A,定义一段序列的冲突值为序列中两两元素相同的对数,要求将序列分成若干段,使得每一段序列的冲突小于等于 K ,问在满足上述条件下最少能将序列分成多少段。

数据范围

n<= 5∗105 , K <=n∗(n−1)2, 1 <=Ai<= n <script type="math/tex" id="MathJax-Element-138">n</script>

题解

相信读者们看完题目这题都切了吧。
这题显然是贪心。
线性扫一遍序列,如果可以延长序列的长度就延长,否则就新分一段序列。
同时开个桶维护一下某种元素出现的个数即可。

Code(Pascal)

varzd:array[0..540000] of int64;ql:array[0..540000] of int64;a:array[0..540000] of int64;n,ans,i:longint;k,u:int64;
beginreadln(n,k);ans:=1;for i:=1 to n dobeginread(a[i]);if ql[a[i]]<>ans thenbeginql[a[i]]:=ans;zd[a[i]]:=0;end;u:=u+zd[a[i]];if u>k thenbegininc(ans);zd[a[i]]:=0;ql[a[i]]:=ans;u:=0;end;inc(zd[a[i]]);end;writeln(ans);
end.

本文发布于:2024-01-30 13:42:10,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170659333320398.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:人生   JZOJ
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23