题目链接: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(树状数组)的更多相关文章

  1. 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 ...

  2. [Codeforces 1208D]Restore Permutation (树状数组)

    [Codeforces 1208D]Restore Permutation (树状数组) 题面 有一个长度为n的排列a.对于每个元素i,\(s_i\)表示\(\sum_{j=1,a_j<a_i} ...

  3. Codeforces 650D - Zip-line(树状数组)

    Codeforces 题目传送门 & 洛谷题目传送门 我怕不是个 nt--一开始忽略了"询问独立"这个条件--然后就一直在想有什么办法维护全局 LIS--心态爆炸 首先离散 ...

  4. Codeforces 1139F Dish Shopping 树状数组套平衡树 || 平衡树

    Dish Shopping 将每个物品拆成p 和 s 再加上人排序. 然后问题就变成了, 对于一个线段(L - R), 问有多少个(li, ri)满足  L >= li && R ...

  5. Codeforces 830B - Cards Sorting 树状数组

    B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  6. CodeForces 522D Closest Equals 树状数组

    题意: 给出一个序列\(A\),有若干询问. 每次询问某个区间中值相等且距离最短的两个数,输出该距离,没有则输出-1. 分析: 令\(pre_i = max\{j| A_j = A_i, j < ...

  7. codeforces 589G G. Hiring(树状数组+二分)

    题目链接: G. Hiring time limit per test 4 seconds memory limit per test 512 megabytes input standard inp ...

  8. CodeForces–830B--模拟,树状数组||线段树

    B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  9. Codeforces 960F Pathwalks ( LIS && 树状数组 )

    题意 : 给出若干个边,每条边按照给出的顺序编号,问你找到一条最长的边权以及边的编号同时严格升序的一条路径,要使得这条路径包含的边尽可能多,最后输出边的条数 分析 :  这题和 LIS 很相似,不同的 ...

  10. codeforces Gym100589H Count Subarrays 树状数组/线段树+离散化

    题意:给你一个数组,问你有多少子数组中的逆元数不小于K个,N<105 还在研究中

随机推荐

  1. Spring Boot @Condition 注解,组合条件你知道吗

    上一篇文章 你应该知道的 @ConfigurationProperties 注解的使用姿势,这一篇就够了 介绍了如何通过 @ConfigurationProperties 注解灵活读取配置属性,这篇文 ...

  2. 【Python-Django后端开发】配置静态文件详解!!!

    配置前端静态文件 1. 准备静态文件 2. 指定静态文件加载路径 STATIC_URL = '/static/' # 配置静态文件加载路径 STATICFILES_DIRS = [os.path.jo ...

  3. Hexo结合github制作博客

    https://blog.csdn.net/Hoshea_chx/article/details/78826689 hexo(themes) vuePress jekylly

  4. Fork 多进程 模拟并行访问web service获取响应时间差

    #include <ros/ros.h> #include <iostream> #include <string> #include <cstring> ...

  5. 【Kubernetes 系列三】Kubernetes 学习文档推荐

    标题 地址 备注 Kubernetes 官方文档 https://kubernetes.io/docs 英文文档,全面 Kubernetes Handbook ttps://jimmysong.io/ ...

  6. S3 Select for Java 使用记录

    背景 后台基本使用 Amazon 的全家桶(EC2.DynamoDB.S3.Step Fuction 等等)构建.现在需要根据访问者的 IP 确定访问者的国家或地区. 已知: 访问者 IP 一个 ip ...

  7. powerdesign进军(三)--mysql驱动配置

    目录 资源下载 powerdesign配置 总结 第二节我们已经安装了oracle的驱动,但是企业中还有一个重头数据库(mysql),今天来安装mysql驱动.mysql相较oracle比较简单. 资 ...

  8. C#串口类封装 SuperSerialPort

    C#串口类封装 SuperSerialPort 基于SerialPort类做了简单的封装方便调用 代码 /// <summary> /// SuperSerialPort /// < ...

  9. c# 读取 txt 文件中数据(int)

    今天在学图的算法做测试是,需要读取文本文件中的点坐标,本来很简单的事情,折腾了半天,记录一下找到的一种简单粗暴的解决方法,以便以后查看. 第一种方法 : StringReader string lin ...

  10. 源码编译OpenJdk 8,Netbeans调试Java原子类在JVM中的实现(Ubuntu 16.04)

    一.前言 前一阵子比较好奇,想看到底层(虚拟机.汇编)怎么实现的java 并发那块. volatile是在汇编里加了lock前缀,因为volatile可以通过查看JIT编译器的汇编代码来看. 但是原子 ...