Submission #439211

#TimeUsernameProblemLanguageResultExecution timeMemory
439211LucaIlieXORanges (eJOI19_xoranges)C11
100 / 100
183 ms4332 KiB
#include <stdio.h> #define MAX_N 200000 int xor[2][4 * MAX_N / 2], orange[2][(MAX_N + 1)/ 2]; void construct( int l, int r, int nod, int v[], int aint[] ) { int mid = (l + r) / 2; if ( l == r ) aint[nod] = v[l]; else { construct( l, mid, nod * 2 + 1, v, aint ); construct( mid + 1, r, nod * 2 + 2, v, aint ); aint[nod] = aint[nod * 2 + 1] ^ aint[nod * 2 + 2]; } } void update( int i, int l, int r, int nod, int v[], int aint[] ) { int mid = (l + r) / 2; if ( l == r ) aint[nod] = v[l]; else { if ( i <= mid ) update( i, l, mid, nod * 2 + 1, v, aint ); else update( i, mid + 1, r, nod * 2 + 2, v, aint ); aint[nod] = aint[nod * 2 + 1] ^ aint[nod * 2 + 2]; } } int query( int lq, int rq, int l, int r, int nod, int v[], int aint[] ) { int mid = (l + r) / 2; if ( lq <= l && r <= rq ) return aint[nod]; if ( rq < l || r < lq ) return 0; return query( lq, rq, l, mid, nod * 2 + 1, v, aint ) ^ query( lq, rq, mid + 1, r, nod * 2 + 2, v, aint ); } int main() { int n, q, tip, p, u, x, i; int len[2]; scanf( "%d%d", &n, &q ); for ( i = 0; i < n; i++ ) scanf( "%d", &orange[i % 2][i / 2] ); len[0] = (n + 1) / 2; len[1] = n / 2; for ( p = 0; p < 2; p++ ) construct( 0, len[p] - 1, 0, orange[p], xor[p] ); for ( i = 0; i < q; i++ ) { scanf( "%d", &tip ); if ( tip == 1 ) { scanf( "%d%d", &p, &x ); p--; orange[p % 2][p / 2] = x; update( p / 2, 0, len[p % 2] - 1, 0, orange[p % 2], xor[p % 2] ); } else { scanf( "%d%d", &p, &u ); p--; u--; if ( (u - p + 1) % 2 == 0 ) printf( "0\n" ); else printf( "%d\n", query( p / 2, u / 2, 0, len[p % 2] - 1, 0, orange[p % 2], xor[p % 2] ) ); } } return 0; }

Compilation message (stderr)

xoranges.c: In function 'main':
xoranges.c:47:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |     scanf( "%d%d", &n, &q );
      |     ^~~~~~~~~~~~~~~~~~~~~~~
xoranges.c:49:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |         scanf( "%d", &orange[i % 2][i / 2] );
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
xoranges.c:57:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   57 |         scanf( "%d", &tip );
      |         ^~~~~~~~~~~~~~~~~~~
xoranges.c:59:13: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |             scanf( "%d%d", &p, &x );
      |             ^~~~~~~~~~~~~~~~~~~~~~~
xoranges.c:65:13: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |             scanf( "%d%d", &p, &u );
      |             ^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...