zoukankan      html  css  js  c++  java
  • Light oj 1080

    Time Limit: 2 second(s) Memory Limit: 64 MB

    Given a binary number, we are about to do some operations on the number. Two types of operations can be here.

    'I i j'    which means invert the bit from i to j (inclusive)

    'Q i'    answer whether the ith bit is 0 or 1

    The MSB (most significant bit) is the first bit (i.e. i=1). The binary number can contain leading zeroes.

    Input

    Input starts with an integer T (≤ 10), denoting the number of test cases.

    Each case starts with a line containing a binary integer having length n (1 ≤ n ≤ 105). The next line will contain an integer q (1 ≤ q ≤ 50000) denoting the number of queries. Each query will be either in the form 'I i j' where i, j are integers and 1 ≤ i ≤ j ≤ n. Or the query will be in the form 'Q i' where i is an integer and 1 ≤ i ≤ n.

    Output

    For each case, print the case number in a single line. Then for each query 'Q i' you have to print 1 or 0 depending on the ith bit.

    Sample Input

    Output for Sample Input

    2

    0011001100

    6

    I 1 10

    I 2 7

    Q 2

    Q 1

    Q 7

    Q 5

    1011110111

    6

    I 1 10

    I 2 7

    Q 2

    Q 1

    Q 7

    Q 5

    Case 1:

    0

    1

    1

    0

    Case 2:

    0

    0

    0

    1

    Note

    Dataset is huge, use faster i/o methods.

    思路:
    看到了RMQ,用数状数组或者线段树进行维护。利用树状数组的快速区间求和维护,将每个点的反转次数进进行记录,奇数次后肯定的发生改变,偶数次就不用进行改变。

    没有注意树状数组的上界限n,导致n次WA,我现在只想要脑残片

    #include <map>
    #include <set>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <iostream>
    #include <stack>
    #include <cmath>
    #include <string>
    #include <vector>
    #include <cstdlib>
    //#include <bits/stdc++.h>
    //#define LOACL
    #define space " "
    using namespace std;
    //typedef long long LL;
    //typedef __int64 Int;
    typedef pair<int, int> paii;
    const int INF = 0x3f3f3f3f;
    const double ESP = 1e-5;
    const double PI = acos(-1.0);
    const int MOD = 1e9 + 7;
    const int MAXN = 100000 + 10;
    int lowbit(int x) {return x&(-x);}
    int n, bit[MAXN];
    char str[MAXN], s[3];
    int sum(int x) {
        int s = 0;
        while (x > 0) {
            s += bit[x];
            x -= lowbit(x);
        }
        return s;
    }
    void add(int x, int y) {
        while (x <= n) {
            bit[x] += y;
            x  += lowbit(x);
        }
    }
    int main() {
        int T, a, b, p;
        int Kcase = 0;
        scanf("%d", &T);
        while (T--) {
            scanf("%s", str + 1);
            scanf("%d", &p); str[0] = '1';
            n = strlen(str) - 1;
            printf("Case %d:
    ", ++Kcase);
            memset(bit, 0, sizeof(bit));
            while (p--) {
                scanf("%s", s);
                if (s[0] == 'I') {
                    scanf("%d%d", &a, &b);
                    add(a, -1);
                    add(b + 1, 1);
                }
                else {
                    scanf("%d", &a);
                    if (sum(a) & 1) printf("%d
    ", !(str[a] - '0'));
                    else printf("%d
    ", (str[a] - '0'));
                }
            }
         }
        return 0;
    }



  • 相关阅读:
    如何在for循环中使用多线程
    解决ios10以上H5页面手势、双击缩放问题
    select标签默认选项
    vue三级联动
    手动安装composer详细教学
    密码校验:长度6位以上,至少包含一个数字,一个大写字母,一个小写字母,不包含空格
    tp5生成6位不重复验证码
    css漂亮的阴影边框
    圆形进度条css3样式
    jQuery倒计时组件(jquery.downCount.js)
  • 原文地址:https://www.cnblogs.com/cniwoq/p/6770786.html
Copyright © 2011-2022 走看看