zoukankan      html  css  js  c++  java
  • 块状链表题*1

    poj 2887

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<string>
    #include<cstdio>
    #include<queue>
    #include<cmath>
    #define N 1000010
    #define M 2005
    using namespace std;
    
    class ListTable{
        public:
        char ch[N];
        int sum[N];
        int num;
        int n,m;
        struct ListBlock{
            int size;
            char data[M];
            void push_back(char c){
                size++;
                data[size]=c;
            }
            void insert(int pos,char c){
                for(int i=size+1;i>pos;i--)
                    data[i]=data[i-1];
                data[pos]=c;
                size ++;
            }
            char getData(int pos){
                return data[pos];
            }
        };
        ListBlock block[M];
        void maintain(){
            for(int i=1;i<=num;i++)
                sum[i]=sum[i-1]+block[i].size;
        }
        void init(){
            num=sqrt((n+m)*1.0)+1;
            for(int i=0;i<n;i++)
                block[i/num+1].push_back(ch[i]);
            maintain();
        }
        char query(int pos,int number){
            return block[number].getData(pos);
        }
        void insert(int pos,int number,char c){
            block[number].insert(pos,c);
        }
        char Query(int pos){
            int p=lower_bound(sum+1,sum+1+num,pos)-sum;
            return query(pos-sum[p-1],p);
        }
        void Insert(char c,int pos){
            int p=lower_bound(sum+1,sum+1+num,pos)-sum;
            insert(pos-sum[p-1] ,p,c);
            maintain();
        }
    }f;
    
    int main(){
        scanf("%s",f.ch);
        f.n=strlen(f.ch);
        scanf("%d",&f.m);
        f.init();
        char s[3];
        char c[3];
        int p;
        for(int i=0;i<f.m;i++){
            scanf("%s",s);
            if(s[0]=='Q'){
                scanf("%d",&p);
                printf("%c
    ",f.Query(p));
            }
            else{
                scanf("%s%d",c,&p);
                f.Insert(c[0],p);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    第三次作业
    第二次作业
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    刘存俊第二次作业
    数据压缩第一次作业
    第五次作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/qdscwyy/p/8097920.html
Copyright © 2011-2022 走看看