zoukankan      html  css  js  c++  java
  • LOJ6282 数列分块入门6(分块+暴力)

    真是暴力

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <vector>
    #include <cmath>
    using namespace std;
    vector<int> Vec[600];
    int stack[250000],belong[250000],n,cnt,cntinsert=0,sz,blocknum;
    void rebuild(void){
        for(int i=1;i<=blocknum;i++){
            for(int j=0;j<Vec[i].size();j++)
                stack[++cnt]=Vec[i][j];
            Vec[i].clear();
            }
        sz=sqrt(cnt);
        blocknum=cnt/sz;
        if(cnt/sz)
            blocknum++;
        for(int i=1;i<=cnt;i++)
            belong[i]=(i-1)/sz+1;
        for(int i=1;i<=cnt;i++)
            Vec[belong[i]].push_back(stack[i]);
        cnt=0;
    }
    void insert(int r,int c){
        int posi=1;
        while(posi<=blocknum&&r>Vec[posi].size()){
            r-=Vec[posi].size();
            posi++;
        }
        Vec[posi].insert(Vec[posi].begin()+r-1,c);
        if(Vec[posi].size()>20*sz)
            rebuild();
    }
    int query(int r){
        int posi=1;
        while(posi<=blocknum&&r>Vec[posi].size()){
            r-=Vec[posi].size();
            posi++;
        }
        return Vec[posi][r-1];
    }
    int main(){
        scanf("%d",&n);
        for(cnt=1;cnt<=n;cnt++)
            scanf("%d",&stack[cnt]);
        rebuild();
        for(int i=1;i<=n;i++){
            int opt,l,r,c;
            scanf("%d %d %d %d",&opt,&l,&r,&c);
            if(opt==0){
                insert(l,r);
                ++cntinsert;
            }
            else
                printf("%d
    ",query(r));
        }
    }
    
  • 相关阅读:
    网站
    世上本无事,庸人自扰之
    mac系招聘BBS
    新浪微博语录帝摘录
    dwz jui
    cheap vps
    facebook的开发标准
    rails的一些插件
    租房宝
    在Z10上用3G
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10045453.html
Copyright © 2011-2022 走看看