zoukankan      html  css  js  c++  java
  • [USACO08NOV]lites

    嘟嘟嘟

     

    竟然还能发现这么水的题。就是线段树维护区间亦或嘛~~~~

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<cstring>
     6 #include<cstdlib>
     7 #include<stack>
     8 #include<queue>
     9 #include<vector>
    10 #include<cctype>
    11 using namespace std;
    12 #define space putchar(' ')
    13 #define enter puts("")
    14 #define Mem(a) memset(a, 0, sizeof(a))
    15 typedef long long ll;
    16 typedef double db;
    17 const int INF = 0x3f3f3f3f;
    18 const  db eps = 1e-8;
    19 const int maxn = 1e5 + 5;
    20 inline ll read()
    21 {
    22     ll ans = 0;
    23     char ch = getchar(), last = ' ';
    24     while(!isdigit(ch)) {last = ch; ch = getchar();}
    25     while(isdigit(ch)) {ans = (ans << 3) + (ans << 1) + ch - '0'; ch = getchar();}
    26     if(last == '-') ans = -ans;
    27     return ans;
    28 }
    29 inline void write(ll x)
    30 {
    31     if(x < 0) putchar('-'), x = -x;
    32     if(x >= 10) write(x / 10);
    33     putchar(x % 10 + '0');
    34 }
    35 
    36 int n, m;
    37 
    38 int l[maxn << 2], r[maxn << 2], sum[maxn << 2], lazy[maxn << 2];
    39 void build(int L, int R, int now)
    40 {
    41     l[now] = L; r[now] = R;
    42     if(L == R) return;
    43     int mid = (L + R) >> 1;
    44     build(L, mid, now << 1);
    45     build(mid + 1, R, now << 1 | 1);
    46 }
    47 void pushdown(int now)
    48 {
    49     if(lazy[now])
    50     {
    51         sum[now << 1] = r[now << 1] - l[now << 1] + 1 - sum[now << 1];
    52         lazy[now << 1] ^= 1;
    53         sum[now << 1 | 1] = r[now << 1 | 1] - l[now << 1 | 1] + 1 - sum[now << 1 | 1];
    54         lazy[now << 1 | 1] ^= 1;
    55         lazy[now] = 0;
    56     }
    57 }
    58 void update(int L, int R, int now)
    59 {
    60     if(l[now] == L && r[now] == R)
    61     {
    62         sum[now] = (R - L + 1) - sum[now]; 
    63         lazy[now] ^= 1; return;    
    64     } 
    65     pushdown(now);
    66     int mid = (l[now] + r[now]) >> 1;
    67     if(R <= mid) update(L, R, now << 1);
    68     else if(L > mid) update(L, R, now << 1 | 1);
    69     else update(L, mid, now << 1), update(mid + 1, R, now << 1 | 1);
    70     sum[now] = sum[now << 1] + sum[now << 1 | 1];
    71 }
    72 int query(int L, int R, int now)
    73 {
    74     if(l[now] == L && r[now] == R) return sum[now];
    75     pushdown(now);
    76     int mid = (l[now] + r[now]) >> 1;
    77     if(R <= mid) return query(L, R, now << 1);
    78     else if(L > mid) return query(L, R, now << 1 | 1);
    79     else return query(L, mid, now << 1) + query(mid + 1, R, now << 1 | 1);
    80 }
    81 
    82 int main()
    83 {
    84     n = read(); m = read();
    85     build(1, n, 1);
    86     for(int i = 1; i <= m; ++i)
    87     {
    88         int d = read(), L = read(), R = read();
    89         if(!d) update(L, R, 1);
    90         else write(query(L, R, 1)), enter;
    91     }
    92     return 0;
    93 }
    View Code
  • 相关阅读:
    有关Maven
    白盒测试(White-box Testing)
    Peer Review(同行评审)
    闰年测试(非法输入的判断)
    等价类划分的应用2
    等价类划分(Equivalence Class Partitioning)
    软件测试随堂笔记-1
    软件测试之注意事项
    软件测试的发展方向
    软件测试之白盒测试
  • 原文地址:https://www.cnblogs.com/mrclr/p/9524534.html
Copyright © 2011-2022 走看看