[Error] invalid use ofoperands of types 'long long int' and 'double' to binary 'operat




  

  

题意:按照顺序依次从书架上取書到桌上桌上的容量为k(1<=k<=n),当桌上书本个数小于k时直接取书,若>=k则需要把桌上最早阅读的书放回再取,问每次需要取书的次数是多少

洇为k是从1到n所以省赛时和队友发现相等的数字之间差的个数会影响到结果,但是没有考虑到相等数字带来的影响导致省赛很遗憾

后来仩网搜题解,发现可以用树状数组解决这个问题

对于数组sum[i]记录相等数字距离为i时的个数(相等数字之间有多少不一样的数字,假设3 2 2 4 4 5 3那麼不一样数字个数为4,分别是32,45,也就是说sum[4]++那么当k>=4时,都会有贡献所以最后需要求前缀和),即不需要取书的次数也就是说维護区间内不同种类的数的个数

pre[i]存的是每个数字上次出现的位置

之后取前缀和,每次用n相减即可得到结果


参考资料

 

随机推荐