import java.util.* ;
public class Main {
public static void buildTree( int [ ] arr,int [ ] [ ] tree,int start,int end,int treeNode) {
if ( start== end) {
if ( arr[ start] % 2== 0 ) {
tree[ treeNode] [ 0 ] = 1 ;
} else {
tree[ treeNode] [ 1 ] = 1 ;
}
return ;
}
int mid = start + ( end- start) / 2 ;
buildTree( arr,tree,start,mid,2 * treeNode) ;
buildTree( arr,tree,mid+ 1 ,end,2 * treeNode+ 1 ) ;
tree[ treeNode] [ 0 ] = tree[ 2 * treeNode] [ 0 ] + tree[ 2 * treeNode+ 1 ] [ 0 ] ;
tree[ treeNode] [ 1 ] = tree[ 2 * treeNode] [ 1 ] + tree[ 2 * treeNode+ 1 ] [ 1 ] ;
return ;
}
public static int findCount( int [ ] [ ] tree,int l,int r,int start,int end,int treeNode,int odd) {
if ( start> r || end< l) {
return 0 ;
}
if ( start>= l&& end<= r) {
return tree[ treeNode] [ odd] ;
}
int mid = start + ( end- start) / 2 ;
int one = findCount( tree,l,r,start,mid,2 * treeNode,odd) ;
int two = findCount( tree,l,r,mid+ 1 ,end,2 * treeNode+ 1 ,odd) ;
return one+ two;
}
public static void updateTree( int [ ] [ ] tree,int index,int value,int start,int end,int treeNode) {
if ( start> index || end< index) {
return ;
}
if ( start== end) {
if ( value% 2== 0 ) {
tree[ treeNode] [ 0 ] = 1 ;
tree[ treeNode] [ 1 ] = 0 ;
} else {
tree[ treeNode] [ 0 ] = 0 ;
tree[ treeNode] [ 1 ] = 1 ;
}
return ;
}
int mid = start + ( end- start) / 2 ;
if ( index <= mid) {
updateTree( tree,index,value,start,mid,2 * treeNode) ;
} else {
updateTree( tree,index,value,mid+ 1 ,end,2 * treeNode+ 1 ) ;
}
tree[ treeNode] [ 0 ] = tree[ 2 * treeNode] [ 0 ] + tree[ 2 * treeNode+ 1 ] [ 0 ] ;
tree[ treeNode] [ 1 ] = tree[ 2 * treeNode] [ 1 ] + tree[ 2 * treeNode+ 1 ] [ 1 ] ;
return ;
}
public static void main
( String [ ] args
) { // Write your code here
Scanner in
= new Scanner
( System .
in ) ; int n = in.nextInt ( ) ;
int [ ] arr = new int [ n] ;
for ( int i= 0 ; i< n; i++ ) {
arr[ i] = in.nextInt ( ) ;
}
int [ ] [ ] tree = new int [ 4 * n] [ 2 ] ;
buildTree( arr,tree,0 ,n- 1 ,1 ) ;
int q = in.nextInt ( ) ;
while ( q--> 0 ) {
int type = in.nextInt ( ) ;
if ( type== 1 ) {
int l = in.nextInt ( ) ;
int r = in.nextInt ( ) ;
System .
out .
println ( findCount
( tree,l
- 1 ,r
- 1 ,
0 ,n
- 1 ,
1 ,
0 ) ) ; } else if ( type== 0 ) {
int x = in.nextInt ( ) ;
int y = in.nextInt ( ) ;
updateTree( tree,x- 1 ,y,0 ,n- 1 ,1 ) ;
} else {
int l = in.nextInt ( ) ;
int r = in.nextInt ( ) ;
System .
out .
println ( findCount
( tree,l
- 1 ,r
- 1 ,
0 ,n
- 1 ,
1 ,
1 ) ) ; }
}
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewogIAlwdWJsaWMgc3RhdGljIHZvaWQgYnVpbGRUcmVlKGludFtdIGFycixpbnRbXVtdIHRyZWUsaW50IHN0YXJ0LGludCBlbmQsaW50IHRyZWVOb2RlKXsKICAJCWlmKHN0YXJ0PT1lbmQpewogIAkJCWlmKGFycltzdGFydF0lMj09MCl7CiAgICAgICAgICAgICAgdHJlZVt0cmVlTm9kZV1bMF0gPSAxOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICB0cmVlW3RyZWVOb2RlXVsxXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAJCX0KICAJCWludCBtaWQgPSBzdGFydCArIChlbmQtc3RhcnQpLzI7CiAgCQlidWlsZFRyZWUoYXJyLHRyZWUsc3RhcnQsbWlkLDIqdHJlZU5vZGUpOwogIAkJYnVpbGRUcmVlKGFycix0cmVlLG1pZCsxLGVuZCwyKnRyZWVOb2RlKzEpOwogIAkJdHJlZVt0cmVlTm9kZV1bMF0gPSB0cmVlWzIqdHJlZU5vZGVdWzBdICsgdHJlZVsyKnRyZWVOb2RlKzFdWzBdOwogICAgICAJdHJlZVt0cmVlTm9kZV1bMV0gPSB0cmVlWzIqdHJlZU5vZGVdWzFdICsgdHJlZVsyKnRyZWVOb2RlKzFdWzFdOwogIAkJcmV0dXJuIDsKICAJfQogIAlwdWJsaWMgc3RhdGljIGludCBmaW5kQ291bnQoaW50W11bXSB0cmVlLGludCBsLGludCByLGludCBzdGFydCxpbnQgZW5kLGludCB0cmVlTm9kZSxpbnQgb2RkKXsKICAJCWlmKHN0YXJ0PnIgfHwgZW5kPGwpewogIAkJCXJldHVybiAwOwogIAkJfQogIAkJaWYoc3RhcnQ+PWwmJmVuZDw9cil7CiAgCQkJcmV0dXJuIHRyZWVbdHJlZU5vZGVdW29kZF07CiAgCQl9CiAgCQlpbnQgbWlkID0gc3RhcnQgKyAoZW5kLXN0YXJ0KS8yOwogIAkJaW50IG9uZSA9IGZpbmRDb3VudCh0cmVlLGwscixzdGFydCxtaWQsMip0cmVlTm9kZSxvZGQpOwogIAkJaW50IHR3byA9IGZpbmRDb3VudCh0cmVlLGwscixtaWQrMSxlbmQsMip0cmVlTm9kZSsxLG9kZCk7CiAgCQlyZXR1cm4gb25lK3R3bzsKICAJfQogIAlwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlVHJlZShpbnRbXVtdIHRyZWUsaW50IGluZGV4LGludCB2YWx1ZSxpbnQgc3RhcnQsaW50IGVuZCxpbnQgdHJlZU5vZGUpewogIAkJaWYoc3RhcnQ+aW5kZXggfHwgZW5kPGluZGV4KXsKICAJCQlyZXR1cm47CiAgCQl9CiAgCQlpZihzdGFydD09ZW5kKXsKICAgICAgICAgIGlmKHZhbHVlJTI9PTApewogICAgICAgICAgICB0cmVlW3RyZWVOb2RlXVswXSA9IDE7CiAgICAgICAgICAgIHRyZWVbdHJlZU5vZGVdWzFdID0gMDsKICAgICAgICAgIH1lbHNlewogICAgICAgICAgICB0cmVlW3RyZWVOb2RlXVswXSA9IDA7CiAgICAgICAgICAgIHRyZWVbdHJlZU5vZGVdWzFdID0gMTsKICAgICAgICAgIH0KICAJCQlyZXR1cm47CiAgCQl9CiAgCQlpbnQgbWlkID0gc3RhcnQgKyAoZW5kLXN0YXJ0KS8yOwogIAkJaWYoaW5kZXggPD0gbWlkKXsKICAJCQl1cGRhdGVUcmVlKHRyZWUsaW5kZXgsdmFsdWUsc3RhcnQsbWlkLDIqdHJlZU5vZGUpOwogIAkJfWVsc2V7CiAgCQkJdXBkYXRlVHJlZSh0cmVlLGluZGV4LHZhbHVlLG1pZCsxLGVuZCwyKnRyZWVOb2RlKzEpOwogIAkJfQogIAkJdHJlZVt0cmVlTm9kZV1bMF0gPSB0cmVlWzIqdHJlZU5vZGVdWzBdICsgdHJlZVsyKnRyZWVOb2RlKzFdWzBdOwogICAgICAJdHJlZVt0cmVlTm9kZV1bMV0gPSB0cmVlWzIqdHJlZU5vZGVdWzFdICsgdHJlZVsyKnRyZWVOb2RlKzFdWzFdOwogIAkJcmV0dXJuOwogIAl9CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJLy8gV3JpdGUgeW91ciBjb2RlIGhlcmUKICAgICAgU2Nhbm5lciBpbiA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgIGludCBuID0gaW4ubmV4dEludCgpOwogICAgICBpbnRbXSBhcnIgPSBuZXcgaW50W25dOwogICAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICBhcnJbaV0gPSBpbi5uZXh0SW50KCk7CiAgICAgIH0KICAgICAgaW50W11bXSB0cmVlID0gbmV3IGludFs0Km5dWzJdOwogICAgICBidWlsZFRyZWUoYXJyLHRyZWUsMCxuLTEsMSk7CiAgICAgIGludCBxID0gaW4ubmV4dEludCgpOwogICAgICB3aGlsZShxLS0+MCl7CiAgICAgIAlpbnQgdHlwZSA9IGluLm5leHRJbnQoKTsKICAgICAgCWlmKHR5cGU9PTEpewogICAgICAJCWludCBsID0gaW4ubmV4dEludCgpOwogICAgICAJCWludCByID0gaW4ubmV4dEludCgpOwogICAgICAJCVN5c3RlbS5vdXQucHJpbnRsbihmaW5kQ291bnQodHJlZSxsLTEsci0xLDAsbi0xLDEsMCkpOwogICAgICAJfWVsc2UgaWYodHlwZT09MCl7CiAgICAgIAkJaW50IHggPSBpbi5uZXh0SW50KCk7CiAgICAgIAkJaW50IHkgPSBpbi5uZXh0SW50KCk7CiAgICAgIAkJdXBkYXRlVHJlZSh0cmVlLHgtMSx5LDAsbi0xLDEpOwogICAgICAJfWVsc2V7CiAgICAgICAgICAJaW50IGwgPSBpbi5uZXh0SW50KCk7CiAgICAgIAkJaW50IHIgPSBpbi5uZXh0SW50KCk7CiAgICAgIAkJU3lzdGVtLm91dC5wcmludGxuKGZpbmRDb3VudCh0cmVlLGwtMSxyLTEsMCxuLTEsMSwxKSk7CiAgICAgICAgfQogICAgICB9Cgl9Cgp9