cojs 简单的求和问题 解题报告
一个上午写了两个数据生成器,三个暴力和两个正解以及一个未竣工的伪正解思路
真是累死本宝宝了
首先这个题目暴力我的数据是有很多良心分的
但是不同的暴力拿到的分数也会有所差距,由于是题解就不说暴力怎么写了
首先第一种解法:
我们对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 简单的求和问题 解题报告的更多相关文章
- cojs 疯狂的求和问题 解题报告
QAQ 好久不在cojs上出题了 最近学了点新科技,于是就做成题来分享了 这道题是要求simga(i^k) 那么就先说说部分分的算法吧: 10分: 直接暴力就可以了,时间复杂度O(nlogk) 30分 ...
- cojs 简单的区间问题 解题报告
新学了些弦图和区间图的新玩意,于是就想着出一道题目 其实这道题不用弦图和区间图的理论也是可以做的 首先考虑第一问,第一问是一个NOIP普及组水平的贪心 我们把区间按照右端点从小到大排序,之后从头到尾扫 ...
- cojs 自己出的题目 解题报告
省选成功成为河北B队队长QAQ 真是忧桑 所以在cojs上出了一套鬼畜的关于树的套题 黑白树: 我们先不考虑R操作 设x是u的祖先,那么fa(x)的贡献显然是 fa(x)*(sz(fa(x))-sz( ...
- cojs 简单的01串 题解报告
题意显然是求n位二进制串中不大于其逆序串,取反串,逆序取反串的所有串按字典序排序后的第k个 由于n很小,k很大所以我们可以考虑逐位确定 问题转化为了求方案数,这显然是可以用数位DP做的 设f[len] ...
- cojs 简单的数位DP 题解报告
首先这道题真的是个数位DP 我们考虑所有的限制: 首先第六个限制和第二个限制是重复的,保留第二个限制即可 第五个限制在转移中可以判断,不用放在状态里 对于第一个限制,我们可以增加一维表示余数即可 对于 ...
- 2011 ACM-ICPC 成都赛区解题报告(转)
2011 ACM-ICPC 成都赛区解题报告 首先对F题出了陈题表示万分抱歉,我们都没注意到在2009哈尔滨赛区曾出过一模一样的题.其他的话,这套题还是非常不错的,除C之外的9道题都有队伍AC,最终冠 ...
- 夏令营提高班上午上机测试 Day 4 解题报告
我要是没记错的话,今天的题难度算挺适中的. *标程来自高天宇哥哥 T1:小G的字符串 题目描述 有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 ...
- CYJian的水题大赛2 解题报告
这场比赛是前几天洛谷上 暮雪﹃紛紛dalao的个人公开赛,当时基本上都在水暴力分......也没有好好写正解(可能除了T1) 过了几天颓废的日子之后,本蒟蒻觉得应该卓越一下了qwq,所以就打算写一个解 ...
- 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告
2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...
随机推荐
- HTML5 manifest ApplicationCache
使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. HTML5引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问 ...
- 利用dropbox备份vps数据
在VPS的数据最好定时备份,免得服务器出了什么问题,数据就全丢了.我使用dropbox定时同步wordpress文件夹和数据库信息. 首先下载dropbox ? 1 wget -O dropbox.t ...
- [大牛翻译系列]Hadoop(13)MapReduce 性能调优:优化洗牌(shuffle)和排序阶段
6.4.3 优化洗牌(shuffle)和排序阶段 洗牌和排序阶段都很耗费资源.洗牌需要在map和reduce任务之间传输数据,会导致过大的网络消耗.排序和合并操作的消耗也是很显著的.这一节将介绍一系列 ...
- MAC上 nodejs express 安装
最近在MAC上搭建 nodejs环境以及安装 express 框架,遇到了一些问题,不过最后总算还是安装成功了,下面是操作步骤 1.node js 安装 访问nodejs官网进入下载mac上的安装包 ...
- 为什么24位位图(真彩色)的biSizeImage不等于(biWidth*biBitCount+31)/32*4*biHeight?
规定的,规定BMP文件的像素数据是按行存储的,而且每行的字节数必须为4的倍数,如果实际的像素数据不是4的倍数咋办?这就需要字节对齐,对齐是在一行的末尾添0以补足一行的字节数为4的倍数, ( biWid ...
- IE下无法保存Cookie和Session问题
最近在做新的Web项目时,因为一个验证码无法保存在Cookie中,或者更确切地说是IE下无法保存Cookie的问题纠结了整整一天时间,考虑了多种原因,单步调试了不下三十次,也没有结果.甚至在无奈之下改 ...
- 【译】Android系统简介
简介 本文主要介绍Android的基础知识和体系结构,本文主题: 简介什么是Android,为什么开发者需要关注Android: Android体系结构(如Linux Kernel, Librari ...
- Ubuntu中设置环境变量详解
1, 为单一用户:.bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.打开用户主目录下的.bashrc,在这个文件中加入export PA ...
- Eclipse C/C++开发环境搭建
1 Eclipse的安装 到http://java.sun.com/j2se/1.5.0/download.jsp 下载JRE安装: 到http://eclipse.org下载Eclipse安装.(这 ...
- 谁是最好的Coder
谁是最好的Coder 时间限制:1000 ms | 内存限制:65535 KB 难度:0 描述 计科班有很多Coder,帅帅想知道自己是不是综合实力最强的coder. 帅帅喜欢帅,所以他选了帅 ...