• 【Codeforces】159C String Manipulation 1.0


     1 #include<cstdio>
     2 #include<cstring>
     3 #define MAXN 200010
     4 char s[MAXN];
     5 int tree[26][MAXN<<2];
     6 bool vis[MAXN];
     7 inline void PushUp(int t,int rt)
     8 {
     9     tree[t][rt]=tree[t][rt<<1]+tree[t][rt<<1|1];
    10 }
    11 void Update(int t,int x,int L,int R,int rt)
    12 {
    13     if(L==R)
    14         tree[t][rt]=1;
    15     else
    16     {
    17         int mid=(L+R)>>1;
    18         if(mid>=x)
    19             Update(t,x,L,mid,rt<<1);
    20         else
    21             Update(t,x,mid+1,R,rt<<1|1);
    22         PushUp(t,rt);
    23     }
    24 }
    25 int Find(int t,int x,int L,int R,int rt)
    26 {
    27     if(L==R)
    28     {
    29         tree[t][rt]=0;
    30         return L;
    31     }
    32     int ans,mid=(L+R)>>1;
    33     if(tree[t][rt<<1]>=x)
    34         ans=Find(t,x,L,mid,rt<<1);
    35     else
    36     {
    37         x-=tree[t][rt<<1];
    38         ans=Find(t,x,mid+1,R,rt<<1|1);
    39     }
    40     PushUp(t,rt);
    41     return ans;
    42 }
    43 int main()
    44 {
    45     char ch;
    46     int k,i,j,q,len,n;
    47     while(~scanf("%d %s%d",&k,s+1,&q))
    48     {
    49         memset(vis,false,sizeof(vis));
    50         memset(tree,0,sizeof(tree));
    51         len=strlen(s+1);
    52         n=len*k;
    53         for(j=len+1;--k;)
    54         {
    55             for(i=1;i<=len;i++)
    56                 s[j++]=s[i];
    57         }
    58         s[j]=0;
    59         for(i=1;s[i];i++)
    60             Update(s[i]-'a',i,1,n,1);
    61         while(q--)
    62         {
    63             scanf("%d %c",&i,&ch);
    64             k=Find(ch-'a',i,1,n,1);
    65             vis[k]=true;
    66         }
    67         for(i=1;s[i];i++)
    68         {
    69             if(!vis[i])
    70                 putchar(s[i]);
    71         }
    72         putchar('\n');
    73     }
    74     return 0;
    75 }
    新博客:www.zhixiangli.com
  • 相关阅读:
    C1FlexGrid双grid滚动条联动
    linux实用命令
    大数据学习1(linux环境搭建)
    一个数据开发工程师要知道的名词
    oracle快速向表插入大量数据
    读书笔记--(索引的扫描方式)
    SQL优化策略(数据仓库)
    oracle大表删除数据方案
    加密与解密
    Spring笔记之IOC
  • 原文地址:https://www.cnblogs.com/DrunBee/p/2513164.html
Copyright © 2020-2023  润新知