#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
/*#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#pragma GCC target("avx,avx2,fma")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")*/
using namespace __gnu_pbds;
#define int long long
int dx[] = { 1,-1,0,0,-1,1,-1,1 };
int dy[] = { 0,0,1,-1,-1,1,1,-1 };
#define ordered_set tree<pair<int ,int>, null_type,less<pair<int ,int>>, rb_tree_tag,tree_order_statistics_node_update>
using namespace std;
#define all(v) v.begin(), v.end()
#define rall(name) name.rbegin(),name.rend()
#define ll long long
#define fx(n) cout<<fixed<<setprecision(n);
#define cin(vec) for(auto& i : vec) cin >> i
const int mod = 1000000007;
#define cout(vec) for(auto& i : vec) cout << i <<" "
const double EBS = 1e-6, PI = 3.141592653589793;
#define V vector<int>
#define vv vector<vector<int>>
int tx[] = { -2, -2, 2, 2, 1,-1, 1, -1 };
int ty[] = { 1, -1, 1, -1, 2, 2, -2,-2 };
typedef priority_queue<int> pq_max;
typedef priority_queue<int,vector<int>, greater<int>> pq_min;
#define call_me_dady(arr , val) memset(arr, val, sizeof(arr));
void The_Great_ZEUS (){ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) ;}
//********************************Global Memory*************************
//********************************FUNCTIONS*****************************
//********************************MAIN**********************************
void zeus();
int32_t main()
{
// freopen("mex.in", "r", stdin);
The_Great_ZEUS();
int t = 1 ;
// cin>>t;
for(int iIi = 1 ; iIi <= t ; iIi++)
{
//cout<<"Case "<<iIi<<": ";
zeus();
cout<<"\n";
}
}
//********************************ZEUS**********************************
void zeus()
{
int n , k ;
cin>>n>>k;
V v(n+2);
for(int i =1 ; i <=n ; i ++)cin>>v[i] , v[i]^=v[i-1];
int l =1 , r = n ;
int sz , st ;
auto valid = [&] (int md)
{
int l =1 , r = l + md -1 ;
while (r<=n)
{
int x = v[r] ^ v[l-1];
if(x>=k)return l ;
l++ , r++;
}
return -1LL ;
};
while (l<=r)
{
int md = (l+r)/2;
if(valid(md) !=-1 )sz = md , st = valid(md) , l = md+1;
else r = md-1;
}
cout<<st<<" "<<sz ;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |