zoukankan      html  css  js  c++  java
  • E. XOR and Favorite Number (莫队板子题)

    题目链接

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 inline int read()
     5 {
     6     int x=0,f=1;char ch=getchar();
     7     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
     8     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
     9     return x*f;
    10 }
    11 
    12 /********************************************************************/
    13 
    14 const int maxn = 1e5+7;
    15 int n, m, k;
    16 int a[maxn], belong[maxn];
    17 ll ans[maxn], flag[maxn*20];    //注意这里的flag 要大大大大
    18 ll now;
    19 
    20 struct node{
    21     int l, r;
    22     int id;
    23 }q[maxn];
    24 
    25 bool cmp(node x, node y){
    26     if(belong[x.l] == belong[y.l])
    27         return x.r < y.r;
    28     return belong[x.l] < belong[y.l];
    29 }
    30 
    31 void Update(int x){
    32     now += flag[a[x]^k];
    33     flag[a[x]]++;
    34 }
    35 
    36 void Delete(int x){
    37     flag[a[x]]--;
    38     now -= flag[a[x]^k];
    39 }
    40 
    41 int main(){
    42     n = read(); m = read(); k = read();
    43     int sz = ceil(sqrt(n));
    44     for(int i = 1;i <= n;i++){
    45         a[i] = read();
    46         belong[i] = (i-1)/sz;
    47     }
    48     //前缀异或
    49     for(int i = 1;i <= n;i++){
    50         a[i] = a[i-1]^a[i];
    51     }
    52     for(int i = 1;i <= m;i++){
    53         q[i].l = read(); q[i].r = read();
    54         q[i].id = i;
    55     }
    56     sort(q+1, q+1+m, cmp);
    57     int l = 1, r = 0;
    58     now = 0;
    59     flag[0] = 1;
    60     for(int i = 1;i <= m;i++){
    61         int id = q[i].id;
    62 
    63         //while里面的顺序是不能随意更改的
    64         while(l < q[i].l){
    65             Delete(l-1);
    66             l++;
    67         }
    68         while(l > q[i].l){
    69             l--;
    70             Update(l-1);
    71         }
    72         while(r < q[i].r){
    73             r++;
    74             Update(r);
    75         }
    76         while(r > q[i].r){
    77             Delete(r);
    78             r--;
    79         }
    80         ans[id] = now;
    81     }
    82     for(int i = 1;i <= m;i++){
    83         cout << ans[i] << endl;
    84     }
    85     return 0;
    86 }
  • 相关阅读:
    C he 指针
    typedef 与 define
    (转)ubuntu中安装man手册查看函数原型
    .9 赫夫曼编码
    .8 AVL树
    PowerDesigner使用技巧
    C#基础
    NET框架设计
    Sql Server 执行计划及Sql查询优化
    SQL SERVER函数浅析
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/9625975.html
Copyright © 2011-2022 走看看