• CQOI2006---简单题(真tm简单!)


    题目

    有一个 n 个元素的数组,每个元素初始均为 0 。有 m 条指令,要么让其中一段连续序列数字反转——0 变 1,1 变 0(操作1),要么询问某个元素的值(操作2)。例如当 n=20 时,10 条指令如下:
    这里写图片描述
    输入格式
    输入文件第一行包含两个整数 n,m,表示数组的长度和指令的条数,以下 m 行,每行的第一个数 t 表示操作的种类。若 t=1,则接下来有两个数 L, R (L<=R),表示区间 [L, R] 的每个数均反转;若 t=2,则接下来只有一个数 I,表示询问的下标。
    输出格式
    每个操作 2 输出一行(非0即1),表示每次操作 2 的回答。
    样例数据 1
    输入 
    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% 的数据满足:1≤n≤1,000,1≤m≤10,000

    真的是很简单的一个线段树,区间加1和单点查询值%2就好了,,,,

    也可以直接异或1

    结果小细节写挂了,找了半天。。

    #include<bits/stdc++.h>
    #define lc u<<1
    #define rc (u<<1)+1
    using namespace std;
    int mark[400020],a[100005],m,n,t,L,R;
    inline int read(){
        char ch=getchar();
        int res=0;
        while(!isdigit(ch)) ch=getchar();
        while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
        return res;
    }
    inline void pushdown(int u)
    {
        mark[u]=0;
        mark[lc]^=1,mark[rc]^=1;
    }
    inline void change(int u,int l,int r,int st,int des)
    {
        if(st>=l&&des<=r) 
        {
            mark[u]^=1;
            return ;
        }
        int mid=(st+des)/2;
        if(mid>=r)
        change(lc,l,r,st,mid);
        else if(mid<l)
        change(rc,l,r,mid+1,des);
        else 
        {
            change(lc,l,r,st,mid);
            change(rc,l,r,mid+1,des);
        }
    }
    inline int find(int u,int num,int st,int des)
    {
        if(st==des) return (mark[u]);
        if(mark[u]) pushdown(u);
        int mid=(st+des)/2;
        if(mid>=num) return find(lc,num,st,mid);
        else return find(rc,num,mid+1,des);
    }
    int main(){
        n=read(),m=read();
        for(int i=1;i<=m;i++)
        {
            t=read();
            if(t==1)
            {
                L=read(),R=read();
                change(1,L,R,1,n);
            }
            else
            {
                L=read();
                cout<<find(1,L,1,n)<<'
    ';
            }
        }
    }
  • 相关阅读:
    MariaDB日志文件、备份与恢复
    实例讲解ip地址、子网掩码、可用地址范围的计算
    Nginx配置文件、优化详解
    Centos系统的升级
    编译安装nginx
    虚拟化云计算的相关概念汇总
    ELK日志管理
    Kubernetes 监控
    用 ConfigMap 管理配置
    K8s管理机密信息
  • 原文地址:https://www.cnblogs.com/forever-/p/9736076.html
Copyright © 2020-2023  润新知