zoukankan      html  css  js  c++  java
  • UVA

    紫薯例题

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int N=1e6+10,inf=0x3f3f3f3f;
     5 int rt[N],siz[N*40],ch[N*40][2],tot,n,d,ver;
     6 char buf[N],val[N*40];
     7 #define l(u) ch[u][0]
     8 #define r(u) ch[u][1]
     9 int rnd() {
    10     const int M=(1ll<<31)-1,X=19260817;
    11     static int seed=time(0)%M;
    12     return seed=(ll)seed*X%M;
    13 }
    14 int newnode(char c) {int u=++tot; siz[u]=1,l(u)=r(u)=0,val[u]=c; return u;}
    15 int cpy(int v) {int u=++tot; siz[u]=siz[v],l(u)=l(v),r(u)=r(v),val[u]=val[v]; return u;}
    16 void pu(int u) {siz[u]=siz[l(u)]+siz[r(u)]+1;}
    17 void sp(int w,int k,int& u,int& v) {
    18     if(!w) {u=v=0; return;}
    19     if(k<=siz[l(w)])v=cpy(w),sp(l(w),k,u,l(v)),pu(v);
    20     else u=cpy(w),sp(r(w),k-(siz[l(w)]+1),r(u),v),pu(u);
    21 }
    22 void mg(int& w,int u,int v) {
    23     if(!u||!v) {w=u|v; return;}
    24     if(rnd()%(siz[u]+siz[v])<siz[u])w=u,mg(r(w),r(u),v);
    25     else w=v,mg(l(w),u,l(v));
    26     pu(w);
    27 }
    28 void build(int& u,int l,int r) {
    29     if(l>r) {u=0; return;}
    30     int mid=(l+r)>>1;
    31     u=newnode(buf[mid]);
    32     build(l(u),l,mid-1),build(r(u),mid+1,r),pu(u);
    33 }
    34 void ins(int& rt,int p) {
    35     int n=strlen(buf);
    36     int L,M,R;
    37     build(M,0,n-1);
    38     sp(rt,p,L,R),mg(L,L,M),mg(rt,L,R);
    39 }
    40 void del(int& rt,int p,int c) {
    41     int L,M,R;
    42     sp(rt,p+c-1,L,R),sp(L,p-1,L,M),mg(rt,L,R);
    43 }
    44 void dfs(int u) {
    45     if(!u)return;
    46     dfs(l(u)),putchar(val[u]),dfs(r(u));
    47     if(val[u]=='c')++d;
    48 }
    49 void pr(int& rt,int p,int c) {
    50     int L,M,R;
    51     sp(rt,p+c-1,L,R),sp(L,p-1,L,M);
    52     dfs(M),puts("");
    53     mg(L,L,M),mg(rt,L,R);
    54 }
    55 int main() {
    56     scanf("%d",&n);
    57     for(int i=1; i<=n; ++i) {
    58         int f;
    59         scanf("%d",&f);
    60         if(f==1) {
    61             int p;
    62             scanf("%d%s",&p,buf),p-=d;
    63             ++ver,ins(rt[ver]=rt[ver-1],p);
    64         } else if(f==2) {
    65             int p,c;
    66             scanf("%d%d",&p,&c),p-=d,c-=d;
    67             ++ver,del(rt[ver]=rt[ver-1],p,c);
    68         } else {
    69             int v,p,c;
    70             scanf("%d%d%d",&v,&p,&c),v-=d,p-=d,c-=d;
    71             pr(rt[v],p,c);
    72         }
    73     }
    74     return 0;
    75 }
  • 相关阅读:
    码到成功——冲刺随笔 day 8
    码到成功——冲刺随笔 day 7
    码到成功——冲刺随笔 day 6
    码到成功——冲刺随笔 day 5
    码到成功——冲刺随笔 day 4
    码到成功——冲刺随笔 day 3
    码到成功——冲刺随笔 day 2
    Alpha冲刺 —— 5.9
    Alpha冲刺 —— 5.8
    Alpha冲刺 —— 5.7
  • 原文地址:https://www.cnblogs.com/asdfsag/p/11268200.html
Copyright © 2011-2022 走看看