codeforces E. DNA Evolution(树状数组)
题目链接:http://codeforces.com/contest/828/problem/E
题解:就是开4个数组举一个例子。
A[mod][res][i]表示到i位置膜mod余数是res的‘A’有多少个。然后以此类推其他碱基。就是单点更新区间求和用树状数组就行具体看一下代码。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int M = 1e5 + ;
char s[M];
int T[][][][M];
inline void add(int id , int mod , int res , int k , int v) {
++k;
while(k < M) {
T[id][mod][res][k] += v;
k += (k & (-k));
}
}
inline int getsum(int id , int mod , int res , int k) {
int ret = ;
++k;
while(k) {
ret += T[id][mod][res][k];
k -= (k & (-k));
}
return ret;
}
int main() {
scanf("%s" ,s);
int q , n , x , l , r;
char c[];
scanf("%d" , &q);
memset(T , , sizeof(T));
int L = strlen(s);
for(int i = ; i < L ; i++) {
for(int j = ; j <= ; j++) {
if(s[i] == 'A') add( , j , i % j , i , );
if(s[i] == 'T') add( , j , i % j , i , );
if(s[i] == 'G') add( , j , i % j , i , );
if(s[i] == 'C') add( , j , i % j , i , );
}
}
while(q--) {
scanf("%d" , &n);
if(n == ) {
scanf("%d %s" , &x , c);
x--;
for(int i = ; i <= ; i++) {
if(s[x] == 'A') add( , i , x % i , x , -);
if(s[x] == 'T') add( , i , x % i , x , -);
if(s[x] == 'G') add( , i , x % i , x , -);
if(s[x] == 'C') add( , i , x % i , x , -);
}
for(int i = ; i <= ; i++) {
if(c[] == 'A') add( , i , x % i , x , );
if(c[] == 'T') add( , i , x % i , x , );
if(c[] == 'G') add( , i , x % i , x , );
if(c[] == 'C') add( , i , x % i , x , );
}
s[x] = c[];
}
else {
scanf("%d%d%s" , &l , &r , c);
l--, r--;
int len = strlen(c);
int ans = ;
for(int i = ; i < len ; i++) {
if(c[i] == 'A') ans += (getsum( , len , (i + l) % len , r) - (l == ? : getsum( , len , (i + l) % len , l - )));
if(c[i] == 'T') ans += (getsum( , len , (i + l) % len , r) - (l == ? : getsum( , len , (i + l) % len , l - )));
if(c[i] == 'G') ans += (getsum( , len , (i + l) % len , r) - (l == ? : getsum( , len , (i + l) % len , l - )));
if(c[i] == 'C') ans += (getsum( , len , (i + l) % len , r) - (l == ? : getsum( , len , (i + l) % len , l - )));
}
printf("%d\n" , ans);
}
}
return ;
}
codeforces E. DNA Evolution(树状数组)的更多相关文章
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E. DNA Evolution 树状数组
E. DNA Evolution 题目连接: http://codeforces.com/contest/828/problem/E Description Everyone knows that D ...
- [Codeforces 1208D]Restore Permutation (树状数组)
[Codeforces 1208D]Restore Permutation (树状数组) 题面 有一个长度为n的排列a.对于每个元素i,\(s_i\)表示\(\sum_{j=1,a_j<a_i} ...
- Codeforces 650D - Zip-line(树状数组)
Codeforces 题目传送门 & 洛谷题目传送门 我怕不是个 nt--一开始忽略了"询问独立"这个条件--然后就一直在想有什么办法维护全局 LIS--心态爆炸 首先离散 ...
- Codeforces 1139F Dish Shopping 树状数组套平衡树 || 平衡树
Dish Shopping 将每个物品拆成p 和 s 再加上人排序. 然后问题就变成了, 对于一个线段(L - R), 问有多少个(li, ri)满足 L >= li && R ...
- Codeforces 830B - Cards Sorting 树状数组
B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- CodeForces 522D Closest Equals 树状数组
题意: 给出一个序列\(A\),有若干询问. 每次询问某个区间中值相等且距离最短的两个数,输出该距离,没有则输出-1. 分析: 令\(pre_i = max\{j| A_j = A_i, j < ...
- codeforces 589G G. Hiring(树状数组+二分)
题目链接: G. Hiring time limit per test 4 seconds memory limit per test 512 megabytes input standard inp ...
- CodeForces–830B--模拟,树状数组||线段树
B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Codeforces 960F Pathwalks ( LIS && 树状数组 )
题意 : 给出若干个边,每条边按照给出的顺序编号,问你找到一条最长的边权以及边的编号同时严格升序的一条路径,要使得这条路径包含的边尽可能多,最后输出边的条数 分析 : 这题和 LIS 很相似,不同的 ...
- codeforces Gym100589H Count Subarrays 树状数组/线段树+离散化
题意:给你一个数组,问你有多少子数组中的逆元数不小于K个,N<105 还在研究中
随机推荐
- java8-流的操作
流的操作 流的使用一般包括三件事: 一个数据源来执行一个查询; 一个中间操作链,形成一条流的流水线; 一个终端操作,执行流水线,并能生成结果 中间操作 操作 类型 返回类型 操作参数 函数描述符 fi ...
- Java线程池的增长过程
通过ThreadPoolExecutor的方式创建线程池 ThreadPoolExecutor 构造方法: public ThreadPoolExecutor(int corePoolSize, in ...
- (13)ASP.NET Core 中的选项模式(Options)
1.前言 选项(Options)模式是对配置(Configuration)的功能的延伸.在12章(ASP.NET Core中的配置二)Configuration中有介绍过该功能(绑定到实体类.绑定至对 ...
- 记一次python时间格式转换遇到的坑
需求:拿到指定格式的时间的前一天的时间,如果今天是月初,年初,自动转换,比如:输入时间是:2019-06-27 23:59:59输出时间是:2019-06-26 23:59:59 之前用datetim ...
- Mac安装Homebrew的那些事儿
Mac安装Homebrew的那些事儿 最近小明刚换置了一个 Mac 本,想搭建一个属于自己的博客网站,需要用到 Node.js 环境,而Node.js 在 MacOS 中是由 Homebrew 进行安 ...
- 使用CXF实现WebService
一.首先创建一个maven项目,引入相应的jar包 <?xml version="1.0" encoding="UTF-8"?> <proje ...
- springmvc原理详解(手写springmvc)
最近在复习框架 在快看小说网搜了写资料 和原理 今天总结一下 希望能加深点映像 不足之处请大家指出 我就不画流程图了 直接通过代码来了解springmvc的运行机制和原理 回想用springmvc用 ...
- 开园第一篇---有关tensorflow加载不同模型的问题
写在前面 今天刚刚开通博客,主要想法跟之前某位博主说的一样,希望通过博客园把每天努力的点滴记录下来,也算一种坚持的动力.我是小白一枚,有啥问题欢迎各位大神指教,鞠躬~~ 换了新工作,目前手头是OCR项 ...
- JavaWeb前端分页显示方法
在前端中我们总会遇到显示数据的问题 - 正常情况分页显示是必须的,这个时候我们不能仅仅在前端进行分页,在前端其实做起分页是很困难的,着就要求我们在后台拿数据的时候就要把分页数据准备好,在前端我们只需要 ...
- CodeForces 15D Map
洛谷题目页面传送门 & CodeForces题目页面传送门 题意见洛谷里的翻译.(注意翻译里有错误,应该是优先选上面的矩阵,在同一行的优先选左边的矩阵) 这题一看就会做啊 (以下设大矩阵是\( ...