1407 - 郁闷的小J

小J是国家图书馆的一位图书管理员,他的工作是管理一个巨大的书架。虽然他很能吃苦耐劳,但是由于这个书架十分巨大,所以他的工作效率总是很低,以致他面临着被解雇的危险,这也正是他所郁闷的。

具体说来,书架由N个书位组成,编号从1到N。每个书位放着一本书,每本书有一个特定的编码。

小J的工作有两类:

  1. 图书馆经常购置新书,而书架任意时刻都是满的,所以只得将某位置的书拿掉并换成新购的书。
  2. 小J需要回答顾客的查询,顾客会询问某一段连续的书位中某一特定编码的书有多少本。

例如,共5个书位,开始时书位上的书编码为1,2,3,4,5

一位顾客询问书位1到书位3中编码为“2”的书共多少本,得到的回答为:1

一位顾客询问书位1到书位3中编码为“1”的书共多少本,得到的回答为:1

此时,图书馆购进一本编码为“1”的书,并将它放到2号书位。

一位顾客询问书位1到书位3中编码为“2”的书共多少本,得到的回答为:0

一位顾客询问书位1到书位3中编码为“1”的书共多少本,得到的回答为:2

……

你的任务是写一个程序来回答每个顾客的询问。

INPUT

第一行两个整数N,M,表示一共N个书位,M个操作。

接下来一行共N个整数数A1,A2…AN,Ai表示开始时位置i上的书的编码。

接下来M行,每行表示一次操作,每行开头一个字符

若字符为‘C’,表示图书馆购进新书,后接两个整数A(1<=A<=N),P,表示这本书被放在位置A上,以及这本书的编码为P。

若字符为‘Q’,表示一个顾客的查询,后接三个整数A,B,K(1<=A<=B<=N),表示查询从第A书位到第B书位(包含A和B)中编码为K的书共多少本。

(1<=N,M<=100000,所有出现的书的编码为不大于2147483647的正数。)

OUTPUT

对每一个顾客的查询,输出一个整数,表示顾客所要查询的结果。


sl: 首先随便写了个 线段树套set的方法,不出预料的TLE .

然后又写了个线段树套SBT的写法  ,不能忍的TIE.

最后托人写了个二进制trie的方法  ,AC。但是本若菜不想写虽然很短。

继续yy,  发现用map 吧相同的数字的位置维护一下,这个可以用sbt,或是任何的数据结构都可以吧。然后就能过了。但是不想敲了,囧。

先贴上几份sb了的代码。AC代码随后补上。

正确代码可以参考:   http://vjudge.net/vjudge/problem/viewSource.action?id=2690221   (我就不贴了。。)

我的两份 :

+;
];
];
];
];
; lch[] = rch[] = sz[] = ; }
; }
 == sz[root]; }
); }
 + sz[lch[t]] + sz[rch[t]];
 + sz[lch[t]] + sz[rch[t]];
 == t)  == k)               }
     Type GetSuc(          == root)                   Type tmp = GetSuc(lch[t], k);
                       }
     Type GetKth(                  )          );
     }
               == t) ;
                   + GetRank(rch[t], k);
     }
               == t) ;
                   + GetSmaller(rch[t], k);
     }
               == t)                        }
               == t) {
             t = ++tot;
             lch[t] = rch[t] = ;
             sz[t]= ;
             key[t] = k;
                      }
         sz[t]++;
                           Maintain(t, k >= key[t]);
     }
               == t)                       t = rch[t];
             DeleteSmaller(t , key);
         }              DeleteSmaller(lch[t] , k);
             sz[t] =  + sz[lch[t]] + sz[rch[t]];
         }
     }
     Type Delete(         sz[t]--;
          == lch[t]) || (k > key[t] &&  == rch[t])) {
             Type tmp = key[t];
              == lch[t] ||  == rch[t]) {
                 t = lch[t] + rch[t];
             }                  key[t] = Delete(lch[t], key[t] + );
             }
                      }                                            }                               }
         }
     }
       };
 
 SBT<];
 inline  {
     ;
               +ch-      }
                sbt[o].InsertR(a[i]);
     }
          ;
     build(L,mid,o<<);
     build(mid+,R,o<<|);
 }
      sbt[o].Delete(a[pos]);
     sbt[o].InsertR(val);
          ;
     ,pos,val);
     ,R,o<<|,pos,val);
 }
               );
              }
     ;
     ;
     ,ls,rs,val);
     ,R,o<<|,ls,rs,val);
      }
 
      ];
          ) {
         ;i<=n;i++) {
             a[i]=read();
         }
 
         build(,n,);
         ;i<=m;i++) {
             scanf(             ]==                 ls=read(); rs=read(); val=read();
                 ,n,,ls,rs,val);
                 printf(             }
                              ls=read(); val=read();
                 Update(,n,,ls,val);
                 a[ls]=val;
             }
         }
     }
     ;
 }
+;
];
 inline  {
     ;
               +ch-      }
      hash[o].clear();
              hash[o].insert(a[i]);
     }
 
          ;
     build(L,mid,o<<);
     build(mid+,R,o<<|);
 }
      hash[o].erase(hash[o].find(a[pos]));
     hash[o].insert(val);
          ;
     ,pos,val);
     ,R,o<<|,pos,val);
 }
                    }
     ;
     ;
     ,ls,rs,val);
     ,R,o<<|,ls,rs,val);
      }
 
      ];
          scanf(     ;i<=n;i++) {
         a[i]=read();
     }
 
     build(,n,);
     ;i<=m;i++) {
         scanf(         ]==             ls=read(); rs=read(); val=read();
             ,n,,ls,rs,val);
             printf(         }
                      ls=read(); val=read();
             Update(,n,,ls,val);
             a[ls]=val;
         }
     }
 
     ;
 }

HUST 1407(数据结构)的更多相关文章

  1. 基础数据结构之(Binary Trees)

    从头开始刷ACM,真的发现过去的很多漏洞,特别越是基础的数据结构,越应该学习得精,无论是ACM竞赛,研究生考试,还是工程上,对这些基础数据结构的应用都非常多,深刻理解非常必要.不得不说最近感触还是比较 ...

  2. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  3. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  4. 深入浅出Redis-redis底层数据结构(上)

    1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...

  5. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  6. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  7. 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找

    今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...

  8. 算法与数据结构(八) AOV网的关键路径

    上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的, ...

  9. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

随机推荐

  1. [BZOJ1083][SCOI2005]繁忙的都市 最小生成树

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1083 由kruskal算法原理可知,我们对一张无向图做普通的最小生成树,连上的最后一条边就 ...

  2. P1440 求m区间内的最小值

    题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个 ...

  3. php中 mysql 插入特殊字符(手机端的emoji表情)出现异常

    今天在用mysql存储从微信服务器拉来的数据,出现插入数据异常,报 Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F 的错误. 最终在网上查了一下,有 ...

  4. 使用Jquery1.9 版本 来实现全选

    在使用Jquery实现全选以及反选的时候, 使用attr()实现的时候,在浏览器第一次运行可以全选,但是第二次再全选,不管用.  通过查找资料,用 prop()方法代替attr()方法就行了. 注意: ...

  5. eclipse设置Tomcat超级详细

    刚接触Ajax,创建了jsp文件发现错误 必备软件:tomcat(从apache的官方网站上下载一个,我的是apache-tomcat-8.0.28) 需要下载tomcatPluginV321.zip ...

  6. 浅谈kernel的结构图及生成过程-----(1)

    当今,我们身边如此多的服务器,工作站都运行着linux,因此也有不少的朋友想了解linux内的核心机理.但是由于kernel过于庞大,以致让一些朋友望而却步.(我在大二的时候也有过此经历,当时看到一些 ...

  7. TCP/IP 协议分层

    协议分层 可能大家对OSI七层模型并不陌生,它将网络协议很细致地从逻辑上分为了7层.但是实际运用中并不是按七层模型,一般大家都只使用5层模型.如下: 物理层:一般包括物理媒介,电信号,光信号等,主要对 ...

  8. 使用soapUI5.3.0调试webservice接口(参数为XML格式)

    最近项目中经常要调试webservice接口,从朋友处了解到他们经常使用SoapUI,因此学习一下这个工具的使用,为避免遗忘,特地记录下来,分享分享... 下载 #####首先,下载SoapUI,我下 ...

  9. secureCRT 破解

    转自:http://www.cnblogs.com/qingtingzhe/articles/5008902.html

  10. JAVA基础——设计模式之装饰者模式

    装饰模式 : 对新房进行装修并没有改变房屋的本质,但它可以让房子变得更漂亮.更温馨.更实用.    在软件设计中,对已有对象(新房)的功能进行扩展(装修).    把通用功能封装在装饰器中,用到的地方 ...