#AAA1007. 单指令流多数据流(SIMD)测试
单指令流多数据流(SIMD)测试
时间限制: 1.5 秒
空间限制: 128 MB
题目背景
本题采用分块可以解决,但是也可以作为 SIMD 基础指令的测试题。
题目描述
又是一节体育课的时间了,有 个同学排成了一排。他们都很讨厌排在第一个位置的同学,于是后面的同学中比第一个高的都会产生一个高兴值,这个高兴值等于他的身高减去第一个同学的身高。当然比第一个同学矮的同学产生高兴值为 。
现在体育老师来了,他拥有神奇的魔法,现在他能做如下的三件事:
-
询问某段区间高兴值最大的那个是多少。
-
把某两个同学交换一下位置。
-
选取一段区间的人,把第一个人身高加上 ,第二个加上 ,第三个加上 以此类推。
但是体育老师不会数数,于是他找到你了,对于每一个询问,他要你帮他求出那个值。
输入格式
从标准输入读入数据。
第一行两个整数 ,表示有 个人,有 个操作。
第二行 个整数,顺序输入每个人的身高 。
接下来 行,每行第一个数位一个 表示是做哪一件事情。
- 如果 ,那么接下来有两个整数 ,表示询问这段区间的最大的高兴值。
- 如果 ,接下来两个整数 ,表示交换这两个位置的人。
- 如果 ,接下来三个整数 ,表示把 个人的升高增加 , 个人增加 ,...第 个人增加 。
输出格式
输出到标准输出。
对于每个询问按照顺序输出每个操作 的答案。
6 7
109 827 100 530 10 826
3 1 6 1
2 2 6
1 2 4
1 2 3
2 2 6
1 2 6
1 2 5
722
722
722
719
子任务
- 对于 的数据,保证 。
- 另有 的数据,没有第三种操作。
- 另有 的数据,没有第二种操作。
- 对于 的数据,,,。
提示
其实 SIMD 处理区间操作/区间查询时也可以理解为一种分块思想,本质上就是将 4 个或者 8 个元素捆绑为一个整块处理,零散块暴力处理即可。
来源
山东省选 2012 体育课