# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1104097 | vjudge1 | XOR (IZhO12_xor) | C++17 | 1 ms | 336 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// بسم الله الرحمن الرحيم
// All praise is due to ALLAH alone
#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define endl '\n'
#define exit return 0
#define ll long long int
#define ull unsigned long long int
#define read freopen ("input.txt","r",stdin);
#define write freopen ("output.txt","w",stdout);
#define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define print_vec(vec) for(int i=0;i<vec.size();i++){cout<<vec[i]<<' ';}cout<<"\n";
#define print_set(st) for(auto it=st.begin();it!=st.end();it++){cout<<*it<<' ';}cout<<"\n";
typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update>ordered_set;
#define print_pair(vec) for(int i=0;i<vec.size();i++)cout<<vec[i].first<<' '<<vec[i].second<<endl;
#define dbg(num) cerr<< "Line "<<__LINE__ <<": "<< #num <<" = "<<(num)<<endl
// find_by_order() and order_of_key()
// k-th sorted element and lower_bound
//priority_queue <int, vector<int>, greater<int> > pq; **non_decreasing
//int dx[] = { -2, -2, -1, -1, 1, 1, 2, 2};
//int dy[] = { -1, 1, -2, 2, -2, 2, -1, 1};
ll lcm (ll a, ll b) {return a * (b / __gcd(a, b));}
int dx[] = { -1, 0, +1, 0};
int dy[] = {0, +1, 0, -1};
#define sz 200001
#define mod 1000000007
void solve()
{
ll n, x;
cin >> n >> x;
ll arr[n + 1];
vector<ll>prefix(n + 1, 0);
ll curr = 0;
for (int i = 1; i <= n; i++)
cin >> arr[i], curr ^= arr[i], prefix[i] = curr;
int low = 1, high = n, mid, res = 0, start;
while (low <= high)
{
mid = (low + high) / 2;
int left = 1, right = mid;
int found = 0;
while (right <= n)
{
ll curr_xor = prefix[right] ^ prefix[left - 1];
if (curr_xor >= x)
start = left, found = 1;
left++, right++;
}
if (found)
res = mid, low = mid + 1;
else high = mid - 1;
}
cout << start << ' ' << res << endl;
}
int main()
{
fast;
int tc = 1;
//cin >> tc;
while (tc--)
solve();
//.............................................. ٱلْحَمْدُ لِلَّٰ......................................
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |