#include using namespace std; struct node{ int lone,lzero; int rone,rzero; int tmax0,tmax1; int flag; int l,r; int mlen; }p[100001*4]; int a[100001]; int max(int x,int y) { return x>y?x:y; } int min(int x,int y) { return xmid) insert(x,y,n*2+1); else { insert(x,mid,n*2); insert(mid+1,y,n*2+1); } update_info(n); } int sum(int x,int y,int n) { if(x==p[n].l&&y==p[n].r) return p[n].tmax1; int mid=(p[n].l+p[n].r)/2; if(p[n].flag==1) pushdown(n); if(y<=mid) return sum(x,y,n*2); else if(x>mid) return sum(x,y,n*2+1); else { int left=0,right=0,midden=0; midden=min(mid-x+1,p[n*2].rone)+min(y-mid,p[n*2+1].lone); left=sum(x,mid,n*2); right=sum(mid+1,y,n*2+1); return max(midden,max(left,right)); } } int main() { int n,m,i,nima,x,y; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&a[i]); build(1,n,1); scanf("%d",&m); while(m--) { scanf("%d%d%d",&nima,&x,&y); if(nima==1) insert(x,y,1); else printf("%d\n",sum(x,y,1)); } } return 0; }