Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<stdio.h>
- #include<algorithm>
- #include<cmath>
- #include<vector>
- #include<stack>
- #include<queue>
- #include<set>
- #include<map>
- #include<unordered_map>
- #define x first
- #define y second
- #define all(x) x.begin(), x.end()
- #define pb push_back
- #define mp make_pair
- #define pii pair<char,int>
- // #define int long long
- using namespace std;
- string pp(int a){
- if(a == 0){
- return "0";
- }
- if(a == 1){
- return "1";
- }
- return "2";
- }
- string bn(int a){
- if(a < 2){
- return pp(a);
- }else{
- return bn(a / 2) + pp(a % 2);
- }
- }
- int f(int a,int b){
- string p = bn(a),q = bn(b);
- while(p.size() < q.size()){
- p = "0" + p;
- }
- while(q.size() < p.size()){
- q = "0" + q;
- }
- // cout << p << ' ' << q << endl;
- for(int i = 0;i < p.size();i++){
- if(p[i] > q[i]){
- return (p.size() - i - 1);
- }
- if(p[i] < q[i]){
- break;
- }
- }
- return -1;
- }
- signed main(){
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- int n,q;
- cin >> n;
- vector<int>a(n);
- for(int i = 0;i < n;i++){
- cin >> a[i];
- }
- cin >> q;
- int p,x;
- int cnt = 0;
- q++;
- vector<int>ans;
- while(q--){
- if(cnt != 0){
- cin >> p >> x;
- a[p - 1] = x;
- }
- cnt++;
- int b = 0;
- for(int i = 0;i < n - 1;i++){
- int kk = f(a[i] ^ b,a[i + 1] ^ b);
- if(kk != -1){
- b |= (1 << kk);
- }
- }
- // cout << b << endl;
- bool ok = 1;
- for(int i = 0;i < n - 1;i++){
- if((a[i + 1] ^ b) < (a[i] ^ b)){
- ok = 0;
- break;
- }
- }
- if(ok){
- cout << b << endl;
- }else{
- cout << -1 << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement