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 还在研究中
随机推荐
- 以太坊solidity智能合约-生成随机数
Solidity随机数生成 在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法.其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数. 对于solidity来 ...
- python中的赋值操作与C语言中的赋值操作中的巨大差别
首先让我们来看一个简单的C程序: a = ; b = a; b = ; printf("a = %d, b = %d\n", a, b); 相信只要学过C语言, 不用运行程序便能知 ...
- JAVA开始(基础篇)
数据类型 Boolean 1位Byte 1个字节(8位)Short 2个字节Char 2个字节Int ...
- python_0基础开始_day03
第三节 一.整形和布尔值的转换 int整型 python3: 全部都是整型 python2: 整型,长整型long 十进制转换二进制 # 将十进制的168转换为二进制 #得出结果 将十进制的168转 ...
- MQ如何解决消息的顺序性
一.消息的顺序性 1.延迟队列:设置一个全局变量index,根据实际情况一次按照index++的逻辑一次给消息队列设置延迟时间段,可以是0.5s,甚至1s; 弊端:如果A,B,C..消息队列消费时间不 ...
- elk系列教程:docker中安装配置elk
elasticSearch Docker安装elasticsearch: docker pull docker.io/elasticsearch:7.2.0 启动: docker run -p 920 ...
- 简洁实用Socket框架DotNettySocket
目录 简介 产生背景 使用方式 TcpSocket WebSocket UdpSocket 结尾 简介 DotNettySocket是一个.NET跨平台Socket框架(支持.NET4.5+及.NET ...
- GitHub项目:jkrasnay/sqlbuilder的使用
http://www.jianshu.com/p/7f099b8cf5f0 技术选型: 在报表查询时,通常需要做可以动态添加的条件 在老项目中使用的是一种Tcondition的对象分装sql impo ...
- CMake入门-02-HelloWorld扩展
工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! 扩展-同一目录,多个源文件 (1) 新建 hello 目录,创建 ...
- Python模块——HashLib(摘要算法)与base64
摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...