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
  • 相关阅读:
    PS:图像的编辑(三)修复画笔工具
    如何知道自己电脑连接的无线网密码
    ps里“栅格化图层”有啥作用
    如何解决 ERROR Code 1101报错
    Oracle中SCOTT用户的 emp、dept、bonus、salgrade表的属性和结构
    PSCC2019以上版本如何取消等比裁剪
    distinct 多列详解
    银行取款、查询余额、交电话费功能
    银行卡系统,输入密码取钱功能
    根据周长计算不同形状图形的面积
  • 原文地址:https://www.cnblogs.com/gryzy/p/10294243.html
Copyright © 2011-2022 走看看