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

    链接:P5057 [CQOI2006]简单题

    ----------------------------------

    其实这道题是树状数组的模板题

    ---------------------------------

    看一下题意,如果用树状数组,我们很容易想到差分数组。但是一般的差分数组是不行的

    ---------------------------------

    因为只有零和一,所以对于每一次操作,实就是让它在0和1中循环。而且,很容易得到,对于一个点进行了奇数次操作,他就会被改变,而偶数次操作就不变,知道了这点,我们就可以用树状数组去维护了

    -----------------------------------

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int t[1000001];
     5 int f;
     6 int n,m;
     7 int x;int y;
     8 int lowbit(int x){
     9     return x & -x;
    10 }
    11 int sum(int x){
    12     int ans=0;
    13     while(x){
    14         ans+=t[x];
    15         x-=lowbit(x);
    16     }
    17     return ans;
    18 }
    19 void add(int k,int x){
    20     while(k<=n){
    21         t[k]+=x;
    22         k+=lowbit(k);
    23     }
    24     return ;
    25 }
    26 int main(){
    27     cin>>n>>m;
    28     for(int i=1;i<=m;++i){
    29         cin>>f;
    30         if(f==1){
    31             cin>>x>>y;
    32             add(x,1);
    33             add(y+1,-1);
    34         }
    35         else
    36         {
    37             cin>>y;
    38             cout<<sum(y)%2<<endl;
    39             }    
    40     }
    41     return 0;
    42 }
    Ac
  • 相关阅读:
    Linux Ctrl+Z的使用方法
    ImageView android:tint
    vim recording的使用方法
    java多态实现原理
    Java 修饰符
    Java 变量类型
    Java 对象和类
    Java内存结构详解
    一维数组
    数组
  • 原文地址:https://www.cnblogs.com/For-Miku/p/11248959.html
Copyright © 2011-2022 走看看