Created
March 13, 2017 10:00
-
-
Save saisumit/7c7165c7094b6c646eb8931f1e9f134e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* When Panda is Life ! | |
| _,add8ba, | |
| ,d888888888b, | |
| d8888888888888b _,ad8ba,_ | |
| d888888888888888) ,d888888888b, | |
| I8888888888888888 _________ ,8888888888888b | |
| __________`Y88888888888888P"""""""""""baaa,__ ,888888888888888, | |
| ,adP"""""""""""9888888888P""^ ^""Y8888888888888888I | |
| ,a8"^ ,d888P"888P^ ^"Y8888888888P' | |
| ,a8^ ,d8888' ^Y8888888P' | |
| a88' ,d8888P' I88P"^ | |
| ,d88' d88888P' "b, | |
| ,d88' d888888' `b, | |
| ,d88' d888888I `b, | |
| d88I ,8888888' ___ `b, | |
| ,888' d8888888 ,d88888b, ____ `b, | |
| d888 ,8888888I d88888888b, ,d8888b, `b | |
| ,8888 I8888888I d8888888888I ,88888888b 8, | |
| I8888 88888888b d88888888888' 8888888888b 8I | |
| d8886 888888888 Y888888888P' Y8888888888, ,8b | |
| 88888b I88888888b `Y8888888^ `Y888888888I d88, | |
| Y88888b `888888888b, `""""^ `Y8888888P' d888I | |
| `888888b 88888888888b, `Y8888P^ d88888 | |
| Y888888b ,8888888888888ba,_ _______ `""^ ,d888888 | |
| I8888888b, ,888888888888888888ba,_ d88888888b ,ad8888888I | |
| `888888888b, I8888888888888888888888b, ^"Y888P"^ ____.,ad88888888888I | |
| 88888888888b,`888888888888888888888888b, "" ad888888888888888888888' | |
| 8888888888888698888888888888888888888888b_,ad88ba,_,d88888888888888888888888 | |
| 88888888888888888888888888888888888888888b,`"""^ d8888888888888888888888888I | |
| 8888888888888888888888888888888888888888888baaad888888888888888888888888888' | |
| Y8888888888888888888888888888888888888888888888888888888888888888888888888P | |
| I888888888888888888888888888888888888888888888P^ ^Y8888888888888888888888' | |
| `Y88888888888888888P88888888888888888888888888' ^88888888888888888888I | |
| `Y8888888888888888 `8888888888888888888888888 8888888888888888888P' | |
| `Y888888888888888 `888888888888888888888888, ,888888888888888888P' | |
| `Y88888888888888b `88888888888888888888888I I888888888888888888' | |
| "Y8888888888888b `8888888888888888888888I I88888888888888888' | |
| "Y88888888888P `888888888888888888888b d8888888888888888' | |
| ^""""""""^ `Y88888888888888888888, 888888888888888P' | |
| "8888888888888888888b, Y888888888888P^ | |
| `Y888888888888888888b `Y8888888P"^ | |
| "Y8888888888888888P `""""^ | |
| `"YY88888888888P' | |
| ^""""""""' | |
| */ | |
| using namespace std ; | |
| #include <bits/stdc++.h> | |
| #define REP(i, a, b) for (int i = a; i <= b; i++) | |
| #define FOR(i, n) for (int i = 0; i < n; i++) | |
| #define foreach(it, ar) for ( typeof(ar.begin()) it = ar.begin(); it != ar.end(); it++ ) | |
| #define PI 3.1415926535897932385 | |
| #define uint64 unsigned long long | |
| #define Int long long | |
| #define int64 long long | |
| #define all(ar) ar.begin(), ar.end() | |
| #define pb push_back | |
| #define ff first | |
| #define ss second | |
| #define bit(n) (1<<(n)) | |
| #define Last(i) ( (i) & (-i) ) | |
| #define sq(x) ((x) * (x)) | |
| #define mp make_pair | |
| Int N ; | |
| const int MAXN = 1e5 +50 ; | |
| Int tree[ MAXN ] ; // size of BIT O(n) | |
| Int read( int idx ) | |
| { | |
| Int sum = 0 ; | |
| while( idx ) | |
| { | |
| sum = sum + tree[idx] ; | |
| idx -= (idx & -idx) ; | |
| } | |
| return sum ; | |
| } | |
| void update( int idx , Int val ) | |
| { | |
| while( idx <= N ) | |
| { | |
| tree[idx] += val ; | |
| idx += ( idx & -idx ) ; | |
| } | |
| return ; | |
| } | |
| Int query( int L , int R ) | |
| { | |
| return read( R ) - read(L-1) ; | |
| } | |
| Int func( Int num ) | |
| { | |
| Int ans = (num)*(num-1) ; | |
| return ans/2 ; | |
| } | |
| int main ( ) | |
| { | |
| scanf("%lld",&N) ; | |
| vector<Int>A( N + 1 ) ; | |
| FOR( i , N )scanf("%lld",&A[i+1]) ; | |
| for( int i = 1 ; i <= N ; i ++ ) | |
| if( A[i]&1 )update( i , 1 ) ; | |
| int q ; | |
| scanf("%d",&q) ; | |
| while( q-- ) | |
| { | |
| char type ; | |
| cin >> type ; | |
| if( type == 'V') | |
| { | |
| int L , R ; | |
| scanf("%d%d",&L,&R) ; | |
| L++; R ++ ; | |
| Int no_odd = query( L , R ) ; | |
| Int no_even = R - L + 1 - no_odd ; | |
| //cout<<L<<" "<<R ; | |
| //cin >>type ; | |
| Int ans = func( no_odd ) + func( no_even ) ; | |
| cout<<ans<<'\n' ; | |
| } | |
| else | |
| { | |
| int idx , val ; | |
| scanf("%d%d",&idx,&val) ; | |
| idx ++ ; | |
| if( ( val&1 ) and !( A[idx]&1 ) ) | |
| update(idx,1); | |
| if( !( val&1 ) and (A[idx]&1) ) | |
| update( idx , -1 ) ; | |
| A[idx] = val ; | |
| } | |
| } | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment