zoukankan      html  css  js  c++  java
  • CodeForces

    。。wa了一整天,,,死都找不出bug,后来把x-=l[idx],y-=l[idy]就过了= = 

    还是分块,用双端队列+数组(map可能会爆内存)维护,每次更新只需要更新两端的队列值和数组里存的值,查询直接暴力查询每个块复杂度O(n*sqrt(n))

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pii pair<int,int>
    #define C 0.5772156649
    #define pi acos(-1.0)
    #define ll long long
    #define mod 998244353
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=100000+10,maxn=400,inf=0x3f3f3f3f;
    
    int l[N],r[N],belong[N];
    int m[maxn][N],a[N];
    int n,block,num;
    deque<int>d[maxn];
    void build()
    {
        block=(int)sqrt(n+0.5);
        num=n/block;
        if(n%block)num++;
        for(int i=1;i<=num;i++)
            l[i]=(i-1)*block+1,r[i]=i*block;
        r[num]=n;
        for(int i=1;i<=n;i++)
        {
            belong[i]=(i-1)/block+1;
            int x;
            scanf("%d",&x);
            m[(i-1)/block+1][x]++;
            d[(i-1)/block+1].push_back(x);
        }
    }
    void reblock(int x,int y,int id,int p)
    {
        int len=d[id].size();
        for(int i=0;i<len;i++)
            a[i]=d[id][i];
        for(int i=y;i>=x+1;i--)
            a[i]=a[i-1];
        a[x]=p;
        d[id].clear();
        for(int i=0;i<len;i++)
            d[id].push_back(a[i]);
    }
    void debug()
    {
        for(int i=1;i<=num;i++)
        {
            for(int j=0;j<d[i].size();j++)
                cout<<d[i][j]<<" ";
            cout<<endl;
        }
    }
    int main()
    {
        scanf("%d",&n);
        build();
        int q,lastans=0;
        scanf("%d",&q);
        while(q--)
        {
           // debug();
            int x,y,z;
            scanf("%d",&x);
            if(x==1)
            {
                scanf("%d%d",&x,&y);
                x=(x+lastans-1)%n+1;y=(y+lastans-1)%n+1;
                if(x>y)swap(x,y);
                int idx=belong[x],idy=belong[y];
                x-=l[idx];y-=l[idy];
                if(idx==idy)
                {
                    reblock(x,y,idx,d[idx][y]);
                }
                else
                {
                    int p=d[idy][y];
                    m[idx][d[idy][y]]++;m[idx][d[idx][d[idx].size()-1]]--;
                    m[idy][d[idy-1][d[idy-1].size()-1]]++,m[idy][d[idy][y]]--;
                    for(int i=idy-1;i>=idx+1;i--)
                    {
                        m[i][d[i][d[i].size()-1]]--;
                        m[i][d[i-1][d[i-1].size()-1]]++;
                    }
                    reblock(0,y,idy,d[idy-1][d[idy-1].size()-1]);
                    for(int i=idy-1;i>=idx+1;i--)
                    {
                        d[i].push_front(d[i-1][d[i-1].size()-1]);
                        d[i].pop_back();
                    }
                    reblock(x,d[idx].size()-1,idx,p);
                }
            }
            else
            {
                scanf("%d%d%d",&x,&y,&z);
                x=(x+lastans-1)%n+1,y=(y+lastans-1)%n+1,z=(z+lastans-1)%n+1;
                if(x>y)swap(x,y);
                int ans=0;
                int idx=belong[x],idy=belong[y];
                x-=l[idx],y-=l[idy];
                if(idx==idy)
                {
                    for(int i=x;i<=y;i++)
                        if(d[idx][i]==z)
                            ans++;
                }
                else
                {
                    for(int i=x;i<d[idx].size();i++)
                        if(d[idx][i]==z)
                            ans++;
                    for(int i=0;i<=y;i++)
                        if(d[idy][i]==z)
                            ans++;
                    for(int i=idx+1;i<=idy-1;i++)
                        ans+=m[i][z];
                }
                printf("%d
    ",ans);
                lastans=ans;
            }
        }
        return 0;
    }
    /********************
    
    ********************/
    View Code
  • 相关阅读:
    使用springboot遇到的问题
    npm使用出现的问题
    ORACLE遇到的新知识
    使用linux
    解释ArrayList的源码
    git的基础知识(并不是直接照着抄写的,用到的写过来)
    使用github遇到的问题
    java将数据库中菜单表中内容转化成一个导航树
    使用python自动发放员工工资条到个人邮箱
    zabbix图形中文乱码
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7657993.html
Copyright © 2011-2022 走看看