zoukankan      html  css  js  c++  java
  • CQOI 2006 简单题

    CQOI 2006 简单题

    有一个 n 个元素的数组,每个元素初始均为 0。有 m 条指令,要么让其中一段连续序列数字反转——0 变 11 变 0(操作 11),要么询问某个元素的值(操作 2)。

    例如当 n=20时,10条指令如下:

    操作回答操作后的数组
    1 1 10 N/A 11111111110000000000
    2 6 1 11111111110000000000
    2 12 0 11111111110000000000
    1 5 12 N/A 11110000001100000000
    2 6 0 11110000001100000000
    2 15 0 11110000001100000000
    1 6 16 N/A 11110111110011110000
    1 11 17 N/A 11110111111100001000
    2 12 1 11110111111100001000
    2 6 1 11110111111100001000

    输入格式

    第一行包含两个整数 n,m,表示数组的长度和指令的条数;
    以下 m 行,每行的第一个数 tt 表示操作的种类:

    • 若 t=1,则接下来有两个数 L, R,表示区间 [L, R] 的每个数均反转;
    • 若 t=2,则接下来只有一个数 i,表示询问的下标。

    输出格式

    每个操作 2 输出一行(非 0 即 1),表示每次操作 2 的回答。

    样例

    样例输入

    20 10
    1 1 10
    2 6
    2 12
    1 5 12
    2 6
    2 15
    1 6 16
    1 11 17
    2 12
    2 6

    样例输出

    1
    0
    0
    0
    1
    1

    数据范围与提示

    对于 50% 的数据,1n10^3,1m10^4;

    对于 100% 的数据,1n10^5,1m5×10^5,保证 LR。

    __________________________________________________________________________________________________________________________

    树状数组,只是把求和变成了异或!

    ___________________________________________________________________________________________________________________________

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e5+10;
     4 bool sz[maxn];
     5 int n,m;
     6 inline int lowbit(int x)
     7 {
     8     return x&-x;
     9 }
    10 void update(int x)
    11 {
    12     for(int i=x;i<=n;i+=lowbit(i))sz[i]=!sz[i];
    13 }
    14 bool get(int x)
    15 {
    16     bool ans=0;
    17     for(int i=x;i;i-=lowbit(i))ans^=sz[i];
    18     return ans;
    19 }
    20 int main()
    21 {
    22     scanf("%d%d",&n,&m);
    23     while(m--)
    24     {
    25         int op,l,r;
    26         scanf("%d",&op);
    27         if(op==1)
    28         {
    29             scanf("%d%d",&l,&r);
    30             update(l);update(r+1);
    31         }
    32         else 
    33         {
    34             scanf("%d",&l);
    35             printf("%d
    ",get(l));
    36         }
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    Object-C 类
    POJ 2128:Highways
    默认连接电脑的模式为MTP【转】
    java.lang.ClassFormatError Duplicate field name&signature in class file XXXXXX【转】
    吴恩达机器学习--单变量线性回归【学习笔记】
    用代码实现断开Android手机USB连接【转】
    Android系统属性SystemProperties在应用层的用法【转】
    [RK3288][Android6.0] 调试笔记 --- user版本默认显示开发者选项【转】
    如何彻底禁止手机连接usb,代码实…【转】
    Android关闭USB的ADB调试和文件传输功能(禁用USB)【转】
  • 原文地址:https://www.cnblogs.com/gryzy/p/10294243.html
Copyright © 2011-2022 走看看