信息
- ID
- 1083
- 时间
- 1500ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 86
- 已通过
- 6
- 上传者
这里用ffi的io或者其他办法的io是有办法规避io引起的MLE的,但是思路一样,无所谓啦
fn solve(input: &mut FastReader<impl BufRead>, output: &mut BufWriter<impl Write>) -> Result<()> {
_ = input.nextln();
let mut arr = input.readln::<i64>();
while input.has_next() {
let tmp = input.readln::<usize>();
if tmp[0] == 1 {
let [_, l, r, k] = &tmp[..] else { todo!() };
arr[*l - 1..*r].rotate_right(k % (r - l + 1));
} else {
let [_, i] = &tmp[..] else { todo!() };
writeln!(output, "{}", arr[i - 1])?;
}
}
Ok(())
}
#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
const int N = 1e7 + 10;
int n, q;
vector<ll>a(N);
void roll(vector<ll>& a, int l, int r)
{
for (int i = l, j = r; i <j; i++, j--)
{
swap(a[i],a[j]);
}
}
int main()
{
scanf("%d%d",&n,&q);
for (int i = 0; i < n; i++)
{
scanf("%lld",&a[i]);
}
while (q--)
{
int op;
scanf("%d",&op);
if (op == 1)
{
int l, r, k;
scanf("%d%d%d",&l,&r,&k);
l--, r--;
int len = r - l + 1;
k %= len;
roll(a, l, r), roll(a, l, l + k - 1), roll(a, l + k, r);
}
else
{
int x;
scanf("%d",&x);
printf("%lld\n",a[x-1]);
}
}
return 0;
}