DNA Evolution CodeForces - 828E(树状数组)
题中有两种操作,第一种把某个位置的字母修改,第二种操作查询与[L, R]内与给出字符串循环起来以后对应位置的字母相同的个数。给出的字符串最大长度是10。
用一个四维树状数组表示
cnt[ATCG的编号][可能的给出字符串的长度][原字符中这个位置在循环中的位置][从开始到这个位置] = 出现的次数。
然后对于一开始的字符串,暴力更新每一种情况。
对于1操作,对于每一种可能的循环节长度,把这个位置的贡献清除,然后换成要填入的字母
对于2操作,(l+i)表示在原字符串的位置,(l+i-1)%len表示这个位置在给出的字符串中循环的位置,然后对于给出字符串的每一个 i 位置,查询对应的个数有多少个,相加。
#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define lowbit(x) (x & (-x))
#define INOPEM freopen("in.txt", "r", stdin)
#define OUTOPEN freopen("out.txt", "w", stdout) typedef unsigned long long int ull;
typedef long long int ll;
const double pi = 4.0*atan(1.0);
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+;
const int maxm = ;
const int mod = 1e9+;
using namespace std; int n, m;
int T, tol;
int cnt[][][][maxn];
char s[maxn];
int mx; int getid(char c) {
if(c == 'A') return ;
if(c == 'T') return ;
if(c == 'C') return ;
if(c == 'G') return ;
} void update(int id, int i, int j, int pos, int val) {
for(int x=pos; x<=mx; x+=lowbit(x)) cnt[id][i][j][x] += val;
} int query(int id, int i, int j, int pos) {
int ans = ;
for(int x=pos; x>; x-=lowbit(x)) ans += cnt[id][i][j][x];
return ans;
} void init() {
for(int i=; i<=; i++) {
for(int j=; j<=mx; j++) {
update(getid(s[j]), i, (j-)%i, j, );
}
}
} int main() {
scanf("%s", s+);
mx = strlen(s+);
memset(cnt, , sizeof cnt);
init();
int q;
scanf("%d", &q);
while(q--) {
int op;
scanf("%d", &op);
if(op == ) {
int pos;
char tmp[];
scanf("%d%s", &pos, tmp);
for(int i=; i<=; i++) update(getid(s[pos]), i, (pos-)%i, pos, -);
for(int i=; i<=; i++) update(getid(tmp[]), i, (pos-)%i, pos, );
s[pos] = tmp[];
} else {
int l, r;
char tmp[];
scanf("%d%d%s", &l, &r, tmp);
int len = strlen(tmp);
int ans = ;
for(int i=; i<len; i++) {
ans += query(getid(tmp[i]), len, (l+i-)%len, r) - query(getid(tmp[i]), len, (l+i-)%len, l-);
}
printf("%d\n", ans);
}
}
return ;
}
DNA Evolution CodeForces - 828E(树状数组)的更多相关文章
- Codeforces - 828E DNA Evolution —— 很多棵树状数组
题目链接:http://codeforces.com/contest/828/problem/E E. DNA Evolution time limit per test 2 seconds memo ...
- HDU 3333 | Codeforces 703D 树状数组、离散化
HDU 3333:http://acm.hdu.edu.cn/showproblem.php?pid=3333 这两个题是类似的,都是离线处理查询,对每次查询的区间的右端点进行排序.这里我们需要离散化 ...
- codeforces 341d (树状数组)
problem Iahub and Xors 题目大意 一个n*n的矩阵,要求支持两种操作. 操作1:将一个子矩阵的所有值异或某个数. 操作2:询问某个子矩阵的所以值的异或和. 解题分析 由于异或的特 ...
- CodeForces 396C 树状数组 + DFS
本主题开始看到以为段树或树状数组,但是,对于一个节点的有疑问的所有子节点的加权,这一条件被视为树的根,像 然后1号是肯定在第一层中,然后建立一个单向侧倒查,然后记录下来 其中每个节点 层,终于 两个节 ...
- Codeforces 276E(树状数组)
题意:一棵树有n个节点,1是根节点,根节点的子节点是单链,然后如今有两种操作0 v x d表示距离节点v为d的节点权值都加x,操作1 v问v节点的权值,初始节点权值都是0. 题解:看了别人的题解才会的 ...
- Tokitsukaze and Strange Rectangle CodeForces - 1191F (树状数组,计数)
大意: 给定$n$个平面点, 定义集合$S(l,r,a)$表示横坐标$[l,r]$纵坐标$[a,\infty]$内的所有点. 求可以得到多少种不同的集合. 从上往下枚举底层最右侧点, 树状数组统计贡献 ...
- codeforces 629D 树状数组+LIS
题意:n个圆柱形蛋糕,给你半径 r 和高度 h,一个蛋糕只能放在一个体积比它小而且序号小于它的蛋糕上面,问你这样形成的上升序列中,体积和最大是多少 分析:根据他们的体积进行离散化,然后建树状数组,按照 ...
- Encryption (hard) CodeForces - 958C3 (树状数组)
大意: 给定序列$a$, 要求将$a$分成$k$个非空区间, 使得区间和模$p$的和最小, 要求输出最小值. $k$和$p$比较小, 直接暴力$dp$, 时间复杂度是$O(nklogp)$, 空间是$ ...
- CodeForces 828E DNA Evolution(树状数组)题解
题意:给你一个串k,进行两个操作: “1 a b”:把a位置的字母换成b “2 l r s”:求l到r有多少个字母和s匹配,匹配的条件是这样:从l开始无限循环s形成一个串ss,然后匹配ss和指定区间的 ...
随机推荐
- 解决ssh ltt3.bg.cn 'jps' bash: jps: command not found 问题
>>提君博客原创 http://www.cnblogs.com/tijun/ << linux 上我用hadoop用户配置好SSH后,运行 ssh ltt3.bg.cn ' ...
- Day 5-2 类的继承和派生,重用
类的继承 派生 在子类中重用父类 组合 抽象类 定义: 继承指的是类与类之间的关系,是一种什么“是”什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创建新类的方式,在python中,新 ...
- Android——MaterialDesign之四 FloatingActionButton、Snackbar、CoordinaterLayout
FloatingActionButton 悬浮按钮,默认colorAccent来作为按钮的颜色 <android.support.design.widget.FloatingActionButt ...
- centos5 安装redmine
一.下载依赖包 yum -y install libxslt-devel libyaml-devel libxml2-devel gdbm-devel libffi-devel yum -y inst ...
- Visual Studio2012调试时无法命中断点
今天在调试代码的时候发现在Debug模式下无法命中断点,然后一步步去检查原因,最后发现是在项目-->属性-->生成-->高级-->调试信息被设置为None,然后在选项中将其选择 ...
- spring boot和swagger 整合
本文来源:https://blog.csdn.net/saytime/article/details/74937664 一.依赖 <dependency> <groupId>i ...
- Scss - 简单笔记
原文链接:scss 教程 手头上疯狂在用 scss,虽然可以在里面写原生的 css, 但是为了保持风格的一致性,还是滚去看了看 scss 文档. 一.变量 变量的引入是 scss 的一个核心特性,变量 ...
- 因为网络安全的重要性打算学习linux
互联网的普及,在给人们带来巨大便利的同时,也让人们感受到网络安全隐患带给人们的不安与威胁.尤其是随着计算机技术和网络技术应用范围的不断扩充,网络安全方面存在的漏洞也越来越多,在这种情况下,如何提高网络 ...
- 【数学建模】day08-数理统计III
2. 回归分析 回归分析与曲线拟合区分. 曲线拟合是,根据得到的若干有关变量的一组数据,寻找因变量与(一个或几个)自变量之间的一个函数,使这个函数对那组数据拟合得好.通常,函数的形式可以由经验.先验知 ...
- Javascript和Jquery语法对比总结
目的 相信大家都知道jq是js的一个类库,是为了方便我们开发前端,但是笔者在刚开始学习js和jq时经常将两者的语法记混和混用,所以整理下两者实现相同功能之前的语法区别. 声明变量 javascript ...