• HDU6186(线段树)


    CS Course

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 112    Accepted Submission(s): 66


    Problem Description

    Little A has come to college and majored in Computer and Science.

    Today he has learned bit-operations in Algorithm Lessons, and he got a problem as homework.

    Here is the problem:

    You are giving n non-negative integers a1,a2,,an, and some queries.

    A query only contains a positive integer p, which means you 
    are asked to answer the result of bit-operations (and, or, xor) of all the integers except ap.
     

    Input

    There are no more than 15 test cases. 

    Each test case begins with two positive integers n and p
    in a line, indicate the number of positive integers and the number of queries.

    2n,q105

    Then n non-negative integers a1,a2,,an follows in a line, 0ai109 for each i in range[1,n].

    After that there are q positive integers p1,p2,,pqin q lines, 1pin for each i in range[1,q].
     

    Output

    For each query p, output three non-negative integers indicates the result of bit-operations(and, or, xor) of all non-negative integers except ap in a line.
     

    Sample Input

    3 3 1 1 1 1 2 3
     

    Sample Output

    1 1 0 1 1 0 1 1 0
     

    Source

     
     1 //2017-08-31
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cstring>
     5 #define ll long long
     6 #define mid ((st[id].l+st[id].r)>>1)
     7 #define lson (id<<1)
     8 #define rson ((id<<1)|1)
     9 
    10 using namespace std;
    11 
    12 const int N = 150000;
    13 int arr[N];
    14 struct Node{
    15     int l, r, OR, XOR, AND;
    16 }st[N<<3];
    17 
    18 void build(int id, int l, int r)
    19 {
    20     st[id].l = l; st[id].r = r;
    21     if(l == r){
    22         st[id].OR = arr[l];
    23         st[id].AND = arr[l];
    24         st[id].XOR = arr[l];
    25         return;
    26     }
    27     build(lson, l, mid);
    28     build(rson, mid+1, r);
    29     st[id].OR = st[lson].OR | st[rson].OR;
    30     st[id].XOR = st[lson].XOR ^ st[rson].XOR;
    31     st[id].AND = st[lson].AND & st[rson].AND;
    32 }
    33 
    34 int query(int id, int l, int r, int op){
    35     if(st[id].l == l && st[id].r == r){
    36         if(op == 1)return st[id].OR;
    37         if(op == 2)return st[id].XOR;
    38         if(op == 3)return st[id].AND;
    39     }
    40     if(l > mid)return query(rson, l, r, op);
    41     else if(r <= mid)return query(lson, l, r, op);
    42     else{
    43         if(op == 1)return query(lson, l, mid, op) | query(rson, mid+1, r, op);
    44         if(op == 2)return query(lson, l, mid, op) ^ query(rson, mid+1, r, op);
    45         if(op == 3)return query(lson, l, mid, op) & query(rson, mid+1, r, op);
    46     } 
    47 }
    48 
    49 int main()
    50 {
    51     int n, q;
    52     while(scanf("%d%d", &n, &q)!=EOF)
    53     {
    54         for(int i = 1; i <= n; i++)
    55           scanf("%d", &arr[i]);
    56         build(1, 1, n);
    57         int p;
    58         while(q--){
    59             scanf("%d", &p);
    60             if(p == 1)
    61                   printf("%d %d %d
    ", query(1, 2, n, 3), query(1, 2, n, 1), query(1, 2, n, 2));
    62             else if(p == n)
    63                   printf("%d %d %d
    ", query(1, 1, n-1, 3), query(1, 1, n-1, 1), query(1, 1, n-1, 2));
    64             else    
    65                   printf("%d %d %d
    ", query(1, 1, p-1, 3)&query(1, p+1, n, 3), query(1, 1, p-1, 1)|query(1, p+1, n, 1), query(1, 1, p-1, 2)^query(1, p+1, n, 2));
    66         }
    67     }
    68 
    69     return 0;
    70 }
  • 相关阅读:
    加密解密
    论事件驱动与异步IO
    linux 基础命令
    libgcc_s_dw2-1.dll 缺失问题解决
    TightVNC 远程桌面
    配置机器学习开发环境(eclipse + anaconda2)
    Caffe 执行python实例并可视化
    Caffe windows编译找不到python27_d.lib问题解决
    PHP 上传文件名中带中文的文件失败问题
    Windows 搭建PHP开发环境
  • 原文地址:https://www.cnblogs.com/Penn000/p/7460357.html
Copyright © 2020-2023  润新知