# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
384586 | zoooma13 | XOR (IZhO12_xor) | C++14 | 162 ms | 23404 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define MAX_N 250005
int tr[3][30*MAX_N] ,root ,nn ,k;
void add(int&p ,int a ,int i ,int b = 30){
if(p == 0){
p = ++nn;
tr[2][p] = i;
}
if(b == -1)
return;
add(tr[a>>b&1][p] ,a ,i ,b-1);
}
int ask(int&p ,int a ,int b = 30){
if(p == 0) return 1e9;
if(b == -1) return tr[2][p];
int ret = 1e9;
bool s = k>>b&1 ,t = a>>b&1;
if(s)
ret = min(ret ,ask(tr[!t][p] ,a ,b-1));
else
ret = min({ret ,tr[2][tr[!t][p]] ,ask(tr[t][p] ,a ,b-1)});
return ret;
}
int main()
{
int n ,xr = 0;
scanf("%d%d",&n,&k);
tr[2][0] = 1e9;
add(root ,0 ,0);
pair <int ,int> ans = {-1e9 ,-1e9};
for(int a ,i=1; i<=n; i++){
scanf("%d",&a) ,xr ^= a;
int b = ask(root ,xr);
ans = max(ans ,make_pair(i-b ,-b-1));
add(root ,xr ,i);
}
printf("%d %d\n",-ans.second,ans.first);
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |