zoukankan      html  css  js  c++  java
  • 莫队算法模板

    //#include<bits/stdc++.h>
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<vector>
    #include<cstring>
    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<bitset>
    #include<utility>
    #include<functional>
    #include<iomanip>
    #include<sstream>
    #include<ctime>
    #include<cassert>
    #define A first
    #define B second
    #define mp make_pair
    #define pb push_back
    #define pw(x) (1ll << (x))
    #define sz(x) ((int)(x).size())
    #define all(x) (x).begin(),(x).end()
    #define rep(i,l,r) for(int i=(l);i<(r);i++)
    #define per(i,r,l) for(int i=(r);i>=(l);i--)
    #define FOR(i,l,r) for(int i=(l);i<=(r);i++)
    #define eps 1e-9
    #define PIE acos(-1)
    #define cl(a,b) memset(a,b,sizeof(a))
    #define fastio ios::sync_with_stdio(false);cin.tie(0);
    #define lson l , mid , ls
    #define rson mid + 1 , r , rs
    #define ls (rt<<1)
    #define rs (ls|1)
    #define INF 0x3f3f3f3f
    #define lowbit(x) (x&(-x))
    #define sqr(a) a*a
    #define ll long long
    #define vi vector<int>
    #define pii pair<int, int>
    #define dd(x) cout << #x << " = " << (x) << ", "
    #define de(x) cout << #x << " = " << (x) << "
    "
    #define endl "
    "
    using namespace std;
    //**********************************
    const int maxn=1<<20;
    int n,m,k;
    int belong[maxn];
    ll flag[maxn],ans[maxn],Ans;
    int a[maxn];
    int L=1,R=0;//下标从1开始 
    struct Node{
        int l,r,id;
    }q[maxn];
    bool cmp(Node a,Node b)
    {
        if(belong[a.l]!=belong[b.l])return belong[a.l]<belong[b.l];
        return a.r<b.r;
    }
    void insert(int x)
    {
        Ans+=flag[a[x]^k];//<-----注意顺序
        flag[a[x]]++;      
    }
    void erase(int x)
    {
        flag[a[x]]--;   //<-----注意顺序                                                        
        Ans-=flag[a[x]^k]; 
    }
    //**********************************
    //**********************************
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        int s=sqrt(n);
        FOR(i,1,n)scanf("%d",&a[i]),a[i]=a[i]^a[i-1],belong[i]=i/s;
        FOR(i,1,m)scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
        sort(q+1,q+1+m,cmp);
        flag[0]=1;
        FOR(i,1,m){
            while(L<q[i].l)erase(L++-1);
            while(L>q[i].l)insert(--L-1);
            while(R<q[i].r)insert(++R);
            while(R>q[i].r)erase(R--);
            ans[q[i].id]=Ans;
            //erase都是后缀减
            //insert都是前缀加 
        }
    
        FOR(i,1,m)cout<<ans[i]<<endl;
        return 0;
    }
  • 相关阅读:
    分布式锁设计方案
    ACID/CAP/BASE 理论知识
    分布式ID设计方案
    perl代码调试
    文档型数据库设计模式-如何存储树形数据 [转]
    树形结构的数据库表Schema设计
    http协议相关
    HTTPS加密原理(转)
    VBA读写XML文件
    VBA 刷新数据透视表
  • 原文地址:https://www.cnblogs.com/klaycf/p/9559468.html
Copyright © 2011-2022 走看看