题目名称 2153. 快速红包变换
输入输出 redbag.in/out
难度等级 ★★★★
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 11
题目来源 GravatarKZNS 于2016-02-06加入
开放分组 全部用户
提交状态
分类标签
线段树 分块
分享题解
通过:5, 提交:272, 通过率:1.84%
GravatarKZNS 100 2.048 s 13.31 MiB C++
Gravatar梦那边的美好ET 100 2.366 s 26.14 MiB C++
GravatarFoolMike 100 2.380 s 13.17 MiB C++
Gravatar葳棠殇 100 2.426 s 13.32 MiB C++
GravatarFoolMike 100 2.810 s 12.79 MiB C++
GravatarWei 90 0.857 s 13.02 MiB C++
GravatarWei 90 0.858 s 15.00 MiB C++
Gravatar面对疾风吧 疾风 疾风吧 90 0.933 s 11.38 MiB C++
Gravatarsxysxy 90 0.954 s 9.44 MiB C++
Gravatarsxysxy 90 0.954 s 9.44 MiB C++
本题关联比赛
新春水题赛
关于 快速红包变换 的近10条评论(全部评论)
回复 @Turkey :
不不不……可以重载,但是不能用$const$……
GravatarHZOI_蒟蒻一只
2017-10-09 20:07 24楼
噩梦结束啦!!
+=原来不能重载
GravatarCSU_Turkey
2017-10-09 08:49 23楼
感受到了世界的恶意......为什么要多加一组
GravatarWei
2017-09-15 18:42 22楼
卧槽...这组数据有点强啊23333
GravatarMloVtry
2017-09-15 18:40 21楼
讲道理,直接按照最大值递归下去处理的势能是不行的吧,比较科学的做法是在线段树每个节点上维护严格次小次大值,按吉司机论文方法写吧。
等回来有空了回来造个数据hack暴力选手
造数据方式:
cbmax 1 n -inf 和 cbmin 1 n inf 相间分布,这样可以卡掉直接分治的同学,比如Itachi
初始序列搞成 inf 和 -inf 相间分布,操作的话 cbmax 1 n 0 和 add 1 n -1 交错分布,可以卡掉机智的暴力选手Go灬Fire,他打的特判挺多的
似乎这样做的话几乎所有暴力乱搞就都挂掉了
UPD:分块套平衡树可以做到$O(n\sqrt{nlogn})$
UPD2:分块平衡树卡常……
UPD3:分块大法好,不带平衡树,$O(n\sqrt{n})$,求吉司机线段树造数据来卡我复杂度,数据已更新
GravatarFoolMike
2017-09-15 09:26 20楼
GravatarAnonymity
2017-09-14 16:39 19楼
change的时候忘了给add清零,改完交发现cbmax和cbmin忘改了,最后cbmax和cbmin的修改条件又出了错。。。我要完了
Gravatarswttc
2017-09-07 14:49 18楼
喵喵喵?
GravatarMloVtry
2017-08-02 21:23 17楼
....
GravatarPine
2017-08-02 19:09 16楼
凄凄惨惨戚戚
Gravatarrewine
2017-07-13 10:22 15楼

2153. 快速红包变换

★★★★   输入文件:redbag.in   输出文件:redbag.out   简单对比
时间限制:1 s   内存限制:256 MiB

【题目描述】

春节,又是一年一度发红包的时节。

这天晚上,小O睡的正香,她梦见在NOI上拿了金牌,过不了多久,保送清华,进入计算机系,打入ACM,赢取金奖,走上人生巅峰,想想还有点小激动。

这时,残暴的笑声吵醒了小O。

“哈哈!愚蠢的人类!这种纸质的红包早就不能镇压本座了!哈哈!”

“看你一脸懵逼,没错,本座就是‘祟’!愚蠢的人类!用红包镇压了本座千百年!如今!QQ微信红包当世,人类寄托在压岁钱里的信念已经冲淡了!这,正是本座重现大地的契机!哈哈!”

“人类,你是本座遇到的第一个人!你来和本座玩个游戏吧!恩,就用这可恶的红包吧!哈哈!”

“本座,在这里放一些红包,然后!对里面的钱数做一些变换,你,要回答本座的问题,明白的了吗!哈哈!”

【输入格式】

第一行,一个数N,表示红包的数量

第二行,N个数,表示红包A[1],A[2]……A[N]初始的钱数

第三行,一个数M,表示变换和询问的个数和

第4~3+M行,每行包含一条命令令,和命令的具体细节。

命令如下:

Cadd l r a (add 从A[l]到A[r]每个红包钱数加a)

Cchange l r a (change 从A[l]到A[r]每个红包钱数变为a)

Cbmax l r a (be max 从A[l]到A[r]每个红包钱数变为max(A[i],a))

Cbmin l r a (be min 从A[l]到A[r]每个红包钱数变为min(A[i],a))

Qsum l r (sum 求从A[l]到A[r]每个红包钱数和)

Qwmax l r (what is max 从A[l]到A[r]每个红包钱数的最大值)

Qwmin l r (what is min 从A[l]到A[r]每个红包钱数的最小值)

Qnmax l r (number of max 从A[l]到A[r]每个红包钱数的最大值的个数)

Qnmin l r (number of min 从A[l]到A[r]每个红包钱数的最小值的个数)

【输出格式】

针对每个询问,输出结果,每行一个。

【样例输入1】

10
4 8 4 7 2 2 5 2 9 8
10
Qsum 1 6
Qsum 3 4
Cadd 3 4 8
Cadd 5 6 6
Qsum 6 9
Cadd 7 8 4
Qsum 8 8
Cadd 7 8 8
Cadd 2 5 2
Cadd 7 10 1

【样例输出1】

27
11
24
6

【样例输入2】

10
7 4 4 0 8 1 1 9 3 3
10
Cbmin 2 10 3
Qsum 2 7
Cbmax 2 8 5
Cbmin 2 4 5
Qsum 9 10
Cadd 3 6 9
Cbmin 10 10 7
Qnmax 7 7
Qnmax 4 5
Cadd 4 9 2

【样例输出2】

11
6
1
2

【提示】

各组数据N,M取值,指令种类如下

10 10 Cadd Qsum

1000 1000 Cadd Cchange Qsum

100000 100000 Cadd Cchange Qsum

100000 100000 Cadd Cchange Qsum

100 100 全部

10000 10000 全部

10000 10000 全部

100000 100000 全部

100000 100000 全部

100000 100000 全部

题目中全部数据可用int保存

【来源】

UBWH

UPD:2017.9.15新添数据一组By Mike,现在复杂度不对的算法都跪了……