# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
874575 | sleepntsheep | XOR (IZhO12_xor) | C++17 | 1 ms | 2396 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define N 250000
#define M 9000000
int n, x, z, zz;
unsigned a[N+1];
int A[M], C[M][2], alloc = 1;
int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }
void insert(int v, unsigned x, int j, int i)
{
int b = (x >> j) & 1;
A[v] = max(A[v], i);
if (j)
{
if (!C[v][b]) C[v][b] = ++alloc;
insert(C[v][b], x, j-1, i);
A[v] = max(A[v], max(A[C[v][0]], A[C[v][1]]));
}
}
int query(int v, unsigned x, unsigned y, int j)
{
if (y <= 0) return A[v];
int b = (x >> j) & 1, z = -1;
if (j)
{
if (C[v][b^1] && A[C[v][b^1]] > z) z = max(z, query(C[v][b^1], x, y - (1 << j), j-1));
if ((1u << j) > y)
if (C[v][b] && A[C[v][b]] > z) z = max(z, query(C[v][b], x, y, j-1));
}
return z;
}
int main(void)
{
scanf("%d%d", &n, &x);
for (int i = 1; i <= n; ++i) scanf("%u", a+i), a[i] ^= a[i-1], insert(1, a[i], 31, i);
for (int b, i = 0; i < n; ++i) if ((b = query(1, a[i], x, 31) - i) > z)
z = b, zz = i + 1;
printf("%d %d", zz, z);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |