zoukankan      html  css  js  c++  java
  • [CQOI2006]简单题

    洛咕

    题意:有一个(n(n<=1e5))个元素的数组,每个元素初始均为(0).有(m)条指令,要么让其中一段连续序列数字反转——(0)(1),(1)(0)(操作(1)),要么询问某个元素的值(操作(2)).

    分析:如果没做【模板】树状数组 2这道题,可以先做做这道题.可以发现其实这道题也是模板题了.

    对于操作一,其实就是对区间([l,r])中每个元素增加1(区间增加),对于操作二其实就是单点查询,如果是单数(修改了单数次)输出1,否则输出0.

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<map>
    #include<set>
    #define ll long long
    using namespace std;
    inline int read(){
        int x=0,o=1;char ch=getchar();
        while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
        if(ch=='-')o=-1,ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*o;
    }
    const int N=1e5+5;
    int n,m,f[N];
    inline int lowbit(int x){return x&-x;}
    inline void add(int x,int val){
    	for(;x<=n;x+=lowbit(x))f[x]+=val;
    }
    inline int ask(int x){
    	int ans=0;
    	for(;x;x-=lowbit(x))ans+=f[x];
    	return ans;
    }
    int main(){
    	n=read();m=read();
    	while(m--){
    		int opt=read();
    		if(opt==1){
    			int l=read(),r=read();
    			add(l,1);add(r+1,-1);
    		}
    		else{
    			int pos=read();
    			if(ask(pos)&1)puts("1");
    			else puts("0");
    		}
    	}
        return 0;
    }
    
    
  • 相关阅读:
    50个C/C++经典面试题
    多继承的构造顺序
    sizeof(struct)
    c++ 实现strcpy(),strlen()
    十天冲刺-01
    学习进度条(第八周)
    梦断代码阅读笔记01
    学习进度条(第七周)
    团队作业记账本开发NABCD
    学习进度条(第六周)
  • 原文地址:https://www.cnblogs.com/PPXppx/p/11390667.html
Copyright © 2011-2022 走看看