一个上午写了两个数据生成器,三个暴力和两个正解以及一个未竣工的伪正解思路

真是累死本宝宝了

首先这个题目暴力我的数据是有很多良心分的

但是不同的暴力拿到的分数也会有所差距,由于是题解就不说暴力怎么写了

首先第一种解法:

我们对f序列分块,预处理a序列中每个点在每个块内会被计算多少次

预处理的时候对于每个块把所有区间差分一下,然后O(N)扫一遍统计即可

考虑我们的查询,一定是若干单点和若干块

所以修改我们可以对f序列中所有的块暴力计算贡献

由于已经预处理过,所以这是很好解决的,这样我们就可以解决块的询问了

之后我们考虑对于单点的询问,显然就变成了求a序列的区间和

可以用树状数组在修改log,查询log的时间内完成

总时间复杂度O(n*sqrt(n)*logn)

但是我们可以做到更好,考虑我们实际上修改的次数较少,查询次数较多

所以我们可以采用sqrt(n)修改,O(1)查询的方式来维护

显然我们要对a序列分块,维护a序列的前缀和,每次修改等于把Si-Sn每个数加上一个数

查询的时候只需要返回 单点的值和块的值的和就可以了

这样总时间复杂度O(n*sqrt(n)),空间复杂度O(n*sqrt(n))

但是如果我丧心病狂一点,强行卡内存呢?

下面介绍第二种解法:

我们把询问离线,就可以把修改操作改成增量操作啦

这样贡献就被分离了,一个询问的答案等于块内贡献和之前块贡献的和

首先之前块的贡献的和我们可以通过每次暴力重构前缀和数组做到O(n*sqrt(n))的时间复杂度

块内贡献不是很好算,由于区间和具有可减性,我们可以把一个询问拆成两个前缀和询问

之后我们把所有询问按询问端点从小到大排序,扫每一个询问

之后扫这个询问块内的在它之前的修改来计算贡献,那么我们显然要知道这个修改的点要被计算多少次

我们可以在扫描过程中维护一个数据结构满足区间+1,查询单点值

用树状数组可以做到log修改,log查询,时间复杂度O(n*sqrt(n)*logn)

同理我们一样可以转化为sqrt(n)修改,O(1)查询,做法和上面的同理,对a序列分块即可

时间复杂度O(n*sqrt(n)),空间复杂度O(n)

但是如果我再丧心病狂一点,还要求强制在线呢?

这个题还是可做的,不过做法要多个log,如果谁有更好的做法欢迎与我联系

第三种解法:

我们考虑我们计算某个修改对某个询问的贡献的时候需要的信息

由于我们把询问拆成了前缀和询问,我们只需要知道在f序列中[1-i]这些的f值中ak被计算了多少次

在上一种做法中我们离线排序来计算的这些信息,需要维护的数据结构支持区间修改,单点查询

我们不妨差分一下,转化成单点修改,区间查询

然后我们就可以用可持久化线段树来预处理啦

之后我们读入询问,每sqrt(n)暴力重构一次前缀和,暴力扫块内之前操作计算贡献就可以啦

时间复杂度O(n*sqrt(n)*log(n)),空间复杂度O(n*logn)

这个做法貌似并不能在cojs上跑过去,不过也是一个蛮不错的idea

实测最后两个点会T掉,貌似时限在开大0.5s就能跑过去啦

UPD:对于第二种做法,目前比第一种做法要快

而且本人的写法比较辣鸡,如果第二种做法将修改和查询分开就会减少很多无用的扫描

可以减小常数,貌似可以跑的更快?不过代码量和细节肯定会增多QAQ

由于本人丧心病狂,已经卡了内存

cojs 简单的求和问题 解题报告的更多相关文章

  1. cojs 疯狂的求和问题 解题报告

    QAQ 好久不在cojs上出题了 最近学了点新科技,于是就做成题来分享了 这道题是要求simga(i^k) 那么就先说说部分分的算法吧: 10分: 直接暴力就可以了,时间复杂度O(nlogk) 30分 ...

  2. cojs 简单的区间问题 解题报告

    新学了些弦图和区间图的新玩意,于是就想着出一道题目 其实这道题不用弦图和区间图的理论也是可以做的 首先考虑第一问,第一问是一个NOIP普及组水平的贪心 我们把区间按照右端点从小到大排序,之后从头到尾扫 ...

  3. cojs 自己出的题目 解题报告

    省选成功成为河北B队队长QAQ 真是忧桑 所以在cojs上出了一套鬼畜的关于树的套题 黑白树: 我们先不考虑R操作 设x是u的祖先,那么fa(x)的贡献显然是 fa(x)*(sz(fa(x))-sz( ...

  4. cojs 简单的01串 题解报告

    题意显然是求n位二进制串中不大于其逆序串,取反串,逆序取反串的所有串按字典序排序后的第k个 由于n很小,k很大所以我们可以考虑逐位确定 问题转化为了求方案数,这显然是可以用数位DP做的 设f[len] ...

  5. cojs 简单的数位DP 题解报告

    首先这道题真的是个数位DP 我们考虑所有的限制: 首先第六个限制和第二个限制是重复的,保留第二个限制即可 第五个限制在转移中可以判断,不用放在状态里 对于第一个限制,我们可以增加一维表示余数即可 对于 ...

  6. 2011 ACM-ICPC 成都赛区解题报告(转)

    2011 ACM-ICPC 成都赛区解题报告 首先对F题出了陈题表示万分抱歉,我们都没注意到在2009哈尔滨赛区曾出过一模一样的题.其他的话,这套题还是非常不错的,除C之外的9道题都有队伍AC,最终冠 ...

  7. 夏令营提高班上午上机测试 Day 4 解题报告

    我要是没记错的话,今天的题难度算挺适中的. *标程来自高天宇哥哥 T1:小G的字符串 题目描述 有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 ...

  8. CYJian的水题大赛2 解题报告

    这场比赛是前几天洛谷上 暮雪﹃紛紛dalao的个人公开赛,当时基本上都在水暴力分......也没有好好写正解(可能除了T1) 过了几天颓废的日子之后,本蒟蒻觉得应该卓越一下了qwq,所以就打算写一个解 ...

  9. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

    2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...

随机推荐

  1. WPF 绑定二(绑定指定的字符串)

    xaml: <Window x:Class="WpfApplication1.Window2" xmlns="http://schemas.microsoft.co ...

  2. CSS3制作立体导航

    <ul class="nav"> <li><a href="">首页</a></li> <li ...

  3. Repeat Header / Keep Header Visible in Tables in RS 2008

    You selected "Repeat header rows on each page" or "Keep header rows visible while scr ...

  4. Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json & pickle 数据序列化

    一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...

  5. 全部快捷方式图标变成LNK文件怎么办

    windowsLNK文件打开方式恢复 相信有些用户曾试过错误地把LNK文件打开方式更改其文件导致系统所有快捷方式都失效vista与Windows7系统还普遍使用时候相信大家会有点惊慌失措要紧下面只要大 ...

  6. 从零开始学ios开发(十二):Table Views(中)UITableViewCell定制

    我们继续学习Table View的内容,这次主要是针对UITableViewCell,在前一篇的例子中我们已经使用过UITableViewCell,一个默认的UITableViewCell包含imag ...

  7. JAVA类与对象(二)----类定义基础

    类是组成java程序的基本要素,是java中的一种重要的复合数据类型.它封装了一类对象的状态和方法,是这一类对象的原型.一个类的实现包括两个部分:类声明和类体,基本格式: class <clas ...

  8. PHP中如何获取多个checkbox的值

    > > > weeks后的中括号不可漏,否则用PHP获取的时候只能取到最后一个值.之后PHP就很好处理了,如下: PHP获取checkbox值方法一: $weeks = $_POST ...

  9. .net speed up

    Ngen.exe http://www.cnblogs.com/yukaizhao/archive/2011/11/07/how-to-use-ugen.html Merge.exe Merge dl ...

  10. How do disable paging by swiping with finger in ViewPager but still be able to swipe programmatically?

    The more general extension of ViewPager would bet to create a "SetPagingEnabled" method so ...