http://codility.com/demo/take-sample-test/genomicrangequery

这题有点意思。
一开始以为是RMQ或者线段树,但这样要O(n*logn)。考虑到只有四种字符,可以用数组记录每个字符i之前出现过几次。
二,查询区间是闭区间,所以要处理off by one的问题。

// you can also use includes, for example:
// #include <algorithm>
vector<int> solution(string &S, vector<int> &P, vector<int> &Q) {
// write your code in C++98
int len = S.length();
vector<int> A(len+1);
vector<int> C(len+1);
vector<int> G(len+1);
vector<int> T(len+1);
A[0] = 0;
C[0] = 0;
G[0] = 0;
T[0] = 0;
for (int i = 1; i <= len; i++) {
A[i] = A[i-1];
C[i] = C[i-1];
G[i] = G[i-1];
T[i] = T[i-1];
if (S[i-1] == 'A') {
A[i]++;
}
else if (S[i-1] == 'C') {
C[i]++;
}
else if (S[i-1] == 'G') {
G[i]++;
}
else if (S[i-1] == 'T') {
T[i]++;
}
}
vector<int> ans;
for (int i = 0; i < P.size(); i++) {
int p = P[i];
int q = Q[i] + 1;
if (A[q] - A[p] > 0) ans.push_back(1);
else if (C[q] - C[p] > 0) ans.push_back(2);
else if (G[q] - G[p] > 0) ans.push_back(3);
else if (T[q] - T[p] > 0) ans.push_back(4);
}
return ans;
}

  

*[codility]GenomicRangeQuery的更多相关文章

  1. GenomicRangeQuery /codility/ preFix sums

    首先上题目: A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which ...

  2. Codility NumberSolitaire Solution

    1.题目: A game for one player is played on a board consisting of N consecutive squares, numbered from ...

  3. codility flags solution

    How to solve this HARD issue 1. Problem: A non-empty zero-indexed array A consisting of N integers i ...

  4. *[codility]Peaks

    https://codility.com/demo/take-sample-test/peaks http://blog.csdn.net/caopengcs/article/details/1749 ...

  5. *[codility]Country network

    https://codility.com/programmers/challenges/fluorum2014 http://www.51nod.com/onlineJudge/questionCod ...

  6. *[codility]AscendingPaths

    https://codility.com/programmers/challenges/magnesium2014 图形上的DP,先按照路径长度排序,然后依次遍历,状态是使用到当前路径为止的情况:每个 ...

  7. *[codility]MaxDoubleSliceSum

    https://codility.com/demo/take-sample-test/max_double_slice_sum 两个最大子段和相拼接,从前和从后都扫一遍.注意其中一段可以为0.还有最后 ...

  8. *[codility]Fish

    https://codility.com/demo/take-sample-test/fish 一开始习惯性使用单调栈,后来发现一个普通栈就可以了. #include <stack> us ...

  9. *[codility]CartesianSequence

    https://codility.com/programmers/challenges/upsilon2012 求笛卡尔树的高度,可以用单调栈来做. 维持一个单调递减的栈,每次进栈的时候记录下它之后有 ...

随机推荐

  1. JAXB - Annotations, Class Fields as Attributes: XmlAttribute

    Provided that XML lets you represent a data item as a single value, there is no cut-and-dried rule f ...

  2. 使用MVCJqGrid的心得

    最近公司网站进行升级,项目要用.net mvc,mysql和轻量级orm框架dapper.由于美工页面出不来啊,让我先写简单写写后台的列表,同事说用MvcJqGrid,也得到了架构的同意. 可是不得不 ...

  3. ASP.NET生成日历

    public string GetDayList(DateTime? date) { ; var minDate = Convert.ToDateTime(((DateTime)(date ?? Da ...

  4. Apache中的权限设置

        今天,我们的关注点就集中在 order deny,allow 这个语句中.在网上找了些资料,对它有了一些了解,写在这儿. 我们可能对apache中这个权限设置可能不太清楚,不同的顺序对权限到底 ...

  5. 区分.net、c#、asp.net三者间的关系

    1..net(dot net) .net是一个平台,抽象的平台概念. 实现形式是库:①定义了基本的类型(通用类型系统CTS,common type system).   ②包含.net公共语言运行库( ...

  6. Requirejs开篇

    前言 随着页面的内容丰富,以及网站体验更好.性能优化等,原有的通过script标签引入JavaScript脚本的方式已经不能很好地解决,此时新的一种JavaScript加载方式产生了--延时加载.执行 ...

  7. Eclipse恢复初始界面&打开视图

    恢复初始界面: 单击菜单栏的windows主菜单,在子菜单里选择 Reset Perspective 会弹出各对话框 ,点 ok就可以了 打开视图:Windows->Show View 其中Ot ...

  8. IP address/地址 检查

    1.Determine if a string is a valid IP address in C Beej's Guide to Network Programming 2.9.14. inet_ ...

  9. 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)

    J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64 ...

  10. 九度OJ 1366 栈的压入、弹出序列 【数据结构】

    题目地址:http://ac.jobdu.com/problem.php?pid=1366 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的 ...