原题:

给你一个长度为1e5的序列ai,问你它的所有子序列的最大值与最小值之差的1000次方的和是多少

即∑_{p是a的子序列}(max{p}-min{p})^1000

这题难点在于(max-min)^1000这个东西外边套了次方,不太好处理

首先需要注意一点的性质是因为只考虑最大值和最小值,所以考虑子序列实际上是考虑集合的子集

那么可以对原序列排序,然后枚举两个端点,对应区间的包含端点的所有子集就是最大值和最小值分别为端点的子集

即此区间对答案的贡献为((a[j]-a[i])*2^(j-i-1))*1000

接下来处理(max-min)^1000

一个想法是差分转差为和,然而并没有什么卵子用

另一个想法是枚举区间时不枚举端点,而是枚举长度,这样可以把2的次幂提出来

但是仍旧无法把(max-min)^1000展开

最后的做法是暴力把上式展开,或者手玩小数据,可以发现规律

(涉及到区间问题时常用的一个思路是固定一个端点,考虑与另一个端点有关的变化情况)

所有左端点为1的区间的贡献和为

∑((a[j]-a[1])*2^(j-2))*1000

=2^1000*(a[2]-a[1])^1000+2^1001*(a[3]-a[1])^1000+...+2^(1000+n-1)*(a[n]-a[1])^1000

=2^1000*((a[2]-a[1])^1000+2*(a[3]-a[1])^1000+...+2^(n-1)*(a[n]-a[1])^1000)

把2^1000提出来,令S=(a[2]-a[1])^1000+2*(a[3]-a[1])^1000+...+2^(n-1)*(a[n]-a[1])^1000

暴力展开1000次方

=(a[2]^1000+1000*a[2]^999*a[1]+...+a[1]^1000)+2*(a[3]^1000+...+a[1]^1000)+...+2^(n-1)*(a[n]^1000+...+a[1]^1000)

合并同次项

=(a[2]^1000+2*a[3]^1000+4*a[4]^1000+...+2^(n-1)*a[n]^1000)

-1000*a[1]*(a[2]^999+2*a[3]^999+4*a[4]^999+...+2^(n-1)*a[n]^999)

+C(1000,2)*a[1]^2*(...)

...

+a[1]^1000*(1+2+4+...+2^(n-1))

发现规律了木有!

随着右端点下标增加,同次项的系数每次乘2

而a[j]^0,a[j]^1,a[j]^2,...,a[j]^1000可以预处理

那么如果从左往右枚举左端点i,(a[i+1]^k+2*a[i+2]^k+...+2^p*a[n]^k)可以快速由(a[i+2]^k+...+2^(p-1)*a[n]^k))乘2+a[i+1]^k得到

C可以预处理,a[i]^k也预处理好了,那么对于每一个左端点我们都可以1000次O(1)操作得到它对答案的贡献

耗时1e5*1e3,有点紧,要善用递推性质,盲目龟速乘会挂

还需要注意的一个问题是序列中的相同元素

实际上手玩小数据或者直接证明都可以发现,相同的数按照上述方法处理仍然能得到正确的结果

这个留给读者证明233

没有代码

【ecfinal2019热身赛】B题的更多相关文章

  1. 暑假集训——cf热身赛部分题有感加其题解

    刚刚开始集训,集训队队长暂时还没有拉专题,而是拉了部分codeforces上过题人数在2000左右的题组成了一场热身赛(其实就是一场练习),花了一天时间终于把它刷完了,其中很多题让我学到了很多骚操作, ...

  2. hdu 4706 Children's Day 2013年ICPC热身赛A题 模拟

    题意:按字母顺序排列成n型,简单的模拟题. 当字母排到z时从a开始重新排起. 代码: /* * Author: illuz <iilluzen[at]gmail.com> * Blog: ...

  3. hdu 4707 Pet 2013年ICPC热身赛A题 dfs水题

    题意:linji的仓鼠丢了,他要找回仓鼠,他在房间0放了一块奶酪,按照抓鼠手册所说,这块奶酪可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给出一张关系图,表示各个房间的关系,相邻房间距离为1,而且 ...

  4. hdu 4708 Rotation Lock Puzzle 2013年ICPC热身赛A题 旋转矩阵

    题意:给出一个n*n的矩阵,旋转每一圈数字,求出对角线可能的最大值,以及转到最大时的最小距离. 只要分析每一层就可以了,本来想用地址传递二维数组,发现行不通,改了一下就行了. 这里有个坑,比如: 1 ...

  5. hdu 4715 Difference Between Primes 2013年ICPC热身赛A题 素数水题

    题意:给出一个偶数(不论正负),求出两个素数a,b,能够满足 a-b=x,素数在1e6以内. 只要用筛选法打出素数表,枚举查询下就行了. 我用set储存素数,然后遍历set里面的元素,查询+x后是否还 ...

  6. ACM之最短路径做题笔记与记录

    在这里纪念一下从4月开始一直因为事情而荒废了的最短路,多亏了jbb的帮助,我才完成了FZU热身赛一题简单的一个用模拟链表存边以及最短路径的学习,目前(6.5)已经学会使用了最简单的djstral与sp ...

  7. 2017河工大校赛补题CGH and 赛后小结

    网页设计课上实在无聊,便开始补题,发现比赛时候僵着的东西突然相通了不少 首先,"追妹"这题,两个队友讨论半天,分好多种情况最后放弃(可是我连题目都没看啊),今天看了之后试试是不是直 ...

  8. PTA刷题笔记

    PTA刷题记录 仓库地址: https://github.com/Haorical/Code/tree/master/PTA/GPLT 两周之内刷完GPLT L2和L3的题,持续更新,包括AK代码,坑 ...

  9. 2014年acm亚洲区域赛·鞍山站

    今天北京赛站的比赛也结束了···看了一天的直播之后意识到鞍山站的比赛都过去了一个多月了···这一个月比较萎靡···整天都在睡觉写报告画工图中度过··· 鞍山比哈尔滨还是暖和很多的···就是山上有奇怪的 ...

随机推荐

  1. charles 查找

    本文参考:charles 查找 查找设置 界面如上图,也没啥好说的: 这个还是非常常用的:需要了解 界面如上图,也没啥好说的: 这个还是非常常用的:需要了解 查找需要了解的关键字是: 查找的内容 正则 ...

  2. office word 設置默認的縮放為100%, office word set default Zoom to 100% permanently

    如題,今天剛好遇到一個老師不知道什麽原因造成Microsoft office word 每次打開都會縮放到70% ,所以google 了一下,還真有解決方法. 只要將默認的 使用者範本檔 Normal ...

  3. Egret入门学习日记 --- 第十二篇(书中 5.1节 内容)

    第十二篇(书中 5.1节 内容) 昨天把 第4章完成了. 今天来看第5章. 接下来是 5.1节 的内容. 总结一下 5.1节 的重点: 1.如何制作一个公用按钮皮肤. 跟着做: 重点1:如何制作一个公 ...

  4. 【POJ - 2010】Moo University - Financial Aid(优先队列)

    Moo University - Financial Aid Descriptions 奶牛大学:奶大招生,从C头奶牛中招收N(N为奇数)头.它们分别得分score_i,需要资助学费aid_i.希望新 ...

  5. Seq2Seq模型与注意力机制

    Seq2Seq模型 基本原理 核心思想:将一个作为输入的序列映射为一个作为输出的序列 编码输入 解码输出 解码第一步,解码器进入编码器的最终状态,生成第一个输出 以后解码器读入上一步的输出,生成当前步 ...

  6. PCL学习(一)从PLY文件读入点云数据

    #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #inclu ...

  7. [转帖]CentOS 8 正式发布

    CentOS 8 正式发布   终于发布了.. https://news.cnblogs.com/n/640416/ 前几天刚弄完centos7.7 的环境. CentOS 8 官方正式发布了!!!C ...

  8. 了解 DML、DDL、DCL

    一.DML DML(Data Manipulation Language)数据操纵语言: 最经常用到的 SELECT.UPDATE.INSERT.DELETE. 主要用来对数据库的数据进行一些操作 S ...

  9. java日志框架系列(8):logback框架PatternLayout详解

    当你想要将记录以你想要的的格式写到目的地时,那么你就需要了解如何设置自定义的格式了. 1.PatternLayout 转换模式:由文本文字和格式转换符组成. 下面了解一下格式转换符与格式修饰符表示的意 ...

  10. GBDT笔记

    GBDT笔记 GBDT是Boosting算法的一种,谈起提升算法我们熟悉的是Adaboost,它和AdaBoost算法不同: 区别如下: AdaBoost算法是利用前一轮的弱学习器的误差来更新样本权重 ...