#include <cstdlib>
#include <cstdio>

const int MaxN = 200200;

int n, q, groupNum, first, last;
int A[MaxN];

int main()
{
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		scanf("%d", &A[i]);
	
	first = 0;
	last = n - 1;
	groupNum = 1;
	for (int i = 0; i < n - 1; i++)
		if (A[i] >= A[i + 1]) groupNum++;

	scanf("%d", &q);
	for (int query = 0; query < q; query++)
	{
		int type, x, y, z;
		scanf("%d", &type);

		if (type == 1)
		{
			scanf("%d%d", &x, &y);

			int curr = (first + x - 1) % n;
			int prev = (curr - 1 + n) % n;
			int next = (curr + 1) % n;

			// .... A[prev] A[curr] A[next] ...  --->  A[prev] y A[next]
			if (curr != first && A[prev] < A[curr] && A[prev] >= y)
				groupNum++;
			if (curr != first && A[prev] >= A[curr] && A[prev] < y)
				groupNum--;
			if (curr != last && A[curr] < A[next] && y >= A[next])
				groupNum++;
			if (curr != last && A[curr] >= A[next] && y < A[next])
				groupNum--;

			A[curr] = y;
		}
		else
		{
			scanf("%d", &z);
			if (z != n)
			{
				int left = (first + z - 1) % n;
				int right = (left + 1) % n;

				// A[first] .... A[left] | A[right] ... A[last] ---> A[right] ... A[last] | A[first] ... A[left]
				if (A[left] >= A[right])
					groupNum--;
				if (A[last] >= A[first])
					groupNum++;

				first = right;
				last = left;
			}
		}

		printf("%d\n", groupNum);
	}

	return 0;
}