博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
D - Xenia and Bit Operations
阅读量:5069 次
发布时间:2019-06-12

本文共 3583 字,大约阅读时间需要 11 分钟。

D. Xenia and Bit Operations
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Xenia the beginner programmer has a sequence a, consisting of 2n non-negative integers: a1, a2, ..., a2n. Xenia is currently studying bit operations. To better understand how they work, Xenia decided to calculate some value v for a.

Namely, it takes several iterations to calculate value v. At the first iteration, Xenia writes a new sequence a1 or a2, a3 or a4, ..., a2n - 1 or a2n, consisting of 2n - 1 elements. In other words, she writes down the bit-wise OR of adjacent elements of sequence a. At the second iteration, Xenia writes the bitwise exclusive OR of adjacent elements of the sequence obtained after the first iteration. At the third iteration Xenia writes the bitwise OR of the adjacent elements of the sequence obtained after the second iteration. And so on; the operations of bitwise exclusive OR and bitwise OR alternate. In the end, she obtains a sequence consisting of one element, and that element is v.

Let's consider an example. Suppose that sequence a = (1, 2, 3, 4). Then let's write down all the transformations (1, 2, 3, 4)  → (1 or 2 = 3, 3 or 4 = 7)  →  (3 xor 7 = 4). The result is v = 4.

You are given Xenia's initial sequence. But to calculate value v for a given sequence would be too easy, so you are given additional mqueries. Each query is a pair of integers p, b. Query p, b means that you need to perform the assignment ap = b. After each query, you need to print the new value v for the new sequence a.

Input

The first line contains two integers n and m (1 ≤ n ≤ 17, 1 ≤ m ≤ 105). The next line contains 2n integers a1, a2, ..., a2n (0 ≤ ai < 230). Each of the next m lines contains queries. The i-th line contains integers pi, bi (1 ≤ pi ≤ 2n, 0 ≤ bi < 230) — the i-th query.

Output

Print m integers — the i-th integer denotes value v for sequence a after the i-th quer

 

 

线段树(刚学线段树拿过来练练手

 

 

#include <algorithm>

#include <stack>
#include <istream>
#include <stdio.h>
#include <map>
#include <math.h>
#include <vector>
#include <iostream>
#include <queue>
#include <string.h>
#include <set>
#include <cstdio>
#define FR(i,n) for(int i=0;i<n;i++)
#define MAX 2005
#define mkp pair <int,int>
using namespace std;
const int maxn = 1000000;
typedef long long ll;
const int  inf = 0x3fffff;
void read(ll &x) {
char ch; bool flag = 0;
for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || 1); ch = getchar());
for (x = 0; isdigit(ch); x = (x << 1) + (x << 3) + ch - 48, ch = getchar());
x *= 1 - 2 * flag;
}
ll n;
int m;
struct inof{
  // int l,r;
   int flag;
   int val;
}Tree[maxn<<2];
int arr[maxn];
void build(int l,int r,int id)
{
    if(l==r)
    {
       Tree[id].flag=1;
       Tree[id].val=arr[l];
    }
    else
    {
    int mid = (l+r)/2;
    build(mid+1,r,2*id+1);
    build(l,mid,2*id);
    Tree[id].flag=Tree[id*2].flag^1;
    if(Tree[id].flag)
    {
        Tree[id].val=Tree[id*2].val^Tree[id*2+1].val;
    }
    else
    {
        Tree[id].val=Tree[id*2].val|Tree[id*2+1].val;
    }
    }
    //pushdown(l,r);
}
void update(int l,int r,int pos,int cnt,int id)
{
    if(l==r)
    {
        Tree[id].val=cnt;
    }
    else
    {
        int mid = (l+r)/2;
        if(pos<=mid)update(l,mid,pos,cnt,id*2);
        else update(mid+1,r,pos,cnt,id*2+1);
        if(Tree[id].flag)Tree[id].val=Tree[id*2+1].val^Tree[id*2].val;
        else Tree[id].val=Tree[id*2+1].val|Tree[id*2].val;
    }
}
int main() {
    read(n);
    cin>>m;
    n =(1<<n);
    for(int i=1;i<=n;i++){
        scanf("%d",&arr[i]);
    }//cout<<1<<endl;
    build(1,n,1);
    while(m--){
        int pos;int x;
        scanf("%d%d",&pos,&x);
        update(1,n,pos,x,1);
        printf("%d\n",Tree[1].val);
   }
    return 0;
}

 

 

转载于:https://www.cnblogs.com/DreamKill/p/9383946.html

你可能感兴趣的文章
软件外包平台
查看>>
pandas入门之DataFrame
查看>>
爬虫github_博客资源
查看>>
爬虫加密解密工具类在线网站
查看>>
爬虫mysql,redis重新连接和关闭连接
查看>>
js案例,鼠标移动到图片,图片显示一张照片点击图片能来回切换
查看>>
js点击变色,在点击还原
查看>>
input点击后placeholder中的提示消息消失,而不是输入文字的时候消失
查看>>
js 点击两张图片来回切换
查看>>
wpf -----Expander自定义样式
查看>>
C# 使用 MsieJavaScriptEngine 引擎运行JavaScript
查看>>
每日踩坑 2019-07-30 H5 使用 iframe 底部有白边
查看>>
MVC Areas的使用
查看>>
每日踩坑 2019-08-23 button 元素点击后刷新页面
查看>>
Silverlight之美
查看>>
JavaScript 固定DIV高度,超出部分自动添加滚动条
查看>>
Tire树模板-于是他错误的点名开始了
查看>>
C#自己写的第一个小程序,庆祝一下
查看>>
在公司中使用springboot技术的经验
查看>>
jQuery遍历复杂的JSON数据
查看>>