倒序考虑每一个操作,对于一个操作$[l, r]$,他产生的影响区间将是$[r+1,r + r + l - 1]$,如果$r+l-1>K$的话,$K$之后的区间我们是不关心的。

暴力扫描这个区间 然后对于每一个位置,维护一个类似于并查集的东西。

扫到位置$i$,定义数组$f$ 表示$i$这个位置上的字符是由$f_i$这个位置上的字符填充得到的。然后删除$i$。

这个东西具体怎么搞?我们可以弄一个长度为K,初始化为1的序列。获得第$i$个位置就是这个序列上第$i$个1,然后删除这个位置上的字符,就是把序列上该位置的1变成0。维护这个序列的话树状数组+二分或者树状数组+倍增花式搞,我选择后者,毕竟前者复杂度多一个$log$。不会的话可以看lyd那本书的P203(第一版),或者做一下poj 2182.

当然线段树维护也是可以的啦~

所以我们就得到如下算法:

倒序扫描每一个操作,维护一个变量$now$表示我们关心的区间末尾,对于每次操作的区间$[l,r]$,用一个变量$x$扫描$[r+1,r+l-1]$所要填充的字符的位置。每填充一个数$now$就减一,如果$r>now$就直接停止。因为$now$的缘故,最多填充次数为$K$。每次填充时,设$tmp$为01序列中第$r+1$个1,那么将$tmp$位置上的数减一,然后更新$f_{tmp}$为第$x$个1的位置

然后从左往右求解,如果$f_i$存在,那么$ans_i=ans_{f_i}$,不然$ans_i=s_{j+1},j++$ 由于$f_i$必然比$i$小 所以这样做一定是正确的

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int N = 3e6 + 10;
char s[N], ans[N];
int n, K, len, f[N], c[N];
struct OPT{ int l, r;}a[5050];
int lowbit(int x){ return x & -x;}
void add(int x, int val){
for(int i = x; i <= K; i += lowbit(i)) c[i] += val;
}
int get(int x){
int l = log2(K), sum = 0, ans = 0;
for(int i = l; i >= 0; i--){
int k = (1 << i);
if(ans + k <= K && sum + c[ans + k] < x)
sum += c[ans + k], ans += k;
}
return ans + 1;
}
int main(){
scanf("%s", s + 1);
scanf("%d%d", &K, &n);
for(int i = 1; i <= K; i++) c[i] = i & -i; //初始化树状数组为1
for(int i = 1; i <= n; i++) scanf("%d%d", &a[i].l, &a[i].r);
for(int now = K, i = n; i; i--)
for(int x = a[i].l + 1, j = 1; a[i].r < now && j <= a[i].r - a[i].l + 1; x += 2, j++, now--){
if(x > a[i].r) x = a[i].l;
int tmp = get(a[i].r + 1); add(tmp, -1), f[tmp] = get(x);
}
for(int i = 1, j = 0; i <= K; i++)
ans[i] = f[i] ? ans[f[i]] : s[++j];
puts(ans + 1);
return 0;
}

  

codeforces 217E 【Alien DNA】的更多相关文章

  1. Codeforces 176B【计数DP】

    题意: 给你两个串s1,s2和一个K, 有一种操作是在一个串切开然后交换位置, 问s1有多少种方法经过K次这样的操作变成s2: 思路: (从来没接触过计数DP...还是太菜...参考了[大牛blog] ...

  2. CodeForces 604D 【离散数学 置换群】

    题意: 给你一个方程,方程太变态不打,给你一个p一个k,p保证是大于等于3的质数,k保证在0~p-1之间的整数.要求对应函数的定义域在0~p-1值域为0~p-1的子集,求这样的函数有多少个... 分析 ...

  3. CodeForces 602D 【单调队列】【简单数学】

    题意: 给你n个数,m次询问,每次询问给l和r代表l和r中间所有子区间中特征值的和. 特征值的定义是在这个区间中找i和j使得|tmp[i]-tmp[j]|/|j-i|最大. 思路: 首先是特征值的定义 ...

  4. CodeForces 617C【序枚举】

    题意: 有两个点喷水,有很多个点有花,给出坐标. 求使得每个花都可以被喷到,两个喷水的半径的平方的和最小是多少. 思路: 枚举其中一个喷水的最大半径. 坑: 这题我贪心的思路有很大问题.一开始也是想这 ...

  5. CodeForces 602E【概率DP】【树状数组优化】

    题意:有n个人进行m次比赛,每次比赛有一个排名,最后的排名是把所有排名都加起来然后找到比自己的分数绝对小的人数加一就是最终排名. 给了其中一个人的所有比赛的名次.求这个人最终排名的期望. 思路: 渣渣 ...

  6. Codeforces | CF1029F 【Multicolored Markers】

    这道题其实难度应该小于紫题...除了一点小特判以外没什么难度...\(\leq50\)行代码即可\(AC\)此题 题目大意:给定两个数\(a,b(1\leq a,b\leq 10^{14})\)分别表 ...

  7. Codeforces | CF1037D 【Valid BFS?】

    题目大意:给定一个\(n(1\leq n\leq 2\cdot10^5)\)个节点的树的\(n-1\)条边和这棵树的一个\(BFS\)序\(a_1,a_2,\dots,a_n\),判断这个\(BFS\ ...

  8. Codeforces | CF1029C 【Maximal Intersection】

    论Div3出这样巨水的送分题竟然还没多少人AC(虽说当时我也没A...其实我A了D...逃) 这个题其实一点都不麻烦,排序都可以免掉(如果用\(priority \_ queue\)的话) 先考虑不删 ...

  9. Codeforces | CF1029D 【Concatenated Multiples】

    \(qwq\)昨天晚上\(Div.3\)过了这道题...早上交了\(1A\)...看在\(CF\)上\(hack\)的情况并不乐观而且也没人来交这题的份上...我决定发一篇题解帮\((zhuang)\ ...

随机推荐

  1. loadrunner-录制脚本,设置代理,参数化,校验点,关联

    详细记录一个脚本制作过程相关知识点 制作脚本 因为要做网页所以选择web协议,根据实际需要选择 选择浏览器地址,打开的网页网址,脚本存储地址以及初始化脚本,初始化脚本的目的是执行用例后不再执行此脚本中 ...

  2. Nginx高性能优化

    #Nginx配置文件优化 worker_processes ; # nginx进程数,建议按照cpu数目来指定,一般为它的倍数. worker_cpu_affinity ; # 为每个进程分配CPU的 ...

  3. 【python 3.6】python读取json数据存入MySQL(二)

    在网上找到一个包含全国各省市经纬度的json文件,也可以通过上次的办法,解析json关键字,构造SQL语句,插入数据库. JSON文件格式如下: [ { "name": " ...

  4. ASCII码中的可见字符

    ASCII码中 包括空格的可见字符从32到126共95个 不包括则为94

  5. 亚马逊与Twitter携手电子商务

    亚马逊(Amazon)与Twitter开展了合作,允许用户以Twitter消息的形式将喜欢的商品发送到购物篮中.这些高科技企业正在想办法把社交媒体和电子商务融为一体. 这一功能旨在将Twitter转变 ...

  6. 互评Alpha版本——基于NABCD评论作品,及改进建议

    组名:可以低头,但没必要 组长:付佳 组员:张俊余  李文涛  孙赛佳  田良  于洋  刘欣  段晓睿 一.杨老师粉丝群--<弹球学成语> 1.1 NABCD分析   N(Need,需求 ...

  7. Scrum立会报告+燃尽图(Beta阶段第五次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2387 项目地址:https://coding.net/u/wuyy694 ...

  8. 按Right-BICEP要求的对任务二的测试用例

    测试方法:Right-BICEP 测试计划 1.Right-结果是否正确? 2.B-是否所有的边界条件都是正确的? 3.P-是否满足性能要求? 4.是否有乘除法? 5.是否有括号? 6.是否有真分数? ...

  9. UITableViewCell contentView layoutSubviews 死循环

    发现一个问题,当在UITableViewCell 的 layoutSubviews 中修改 contentView 的frame时会产生死循环.该问题只会出现在iOS8中,iOS7与iOS9均没有问题 ...

  10. Hexo博客搭建全解

    [原创,转载请附网址:http://dongshuyan.top] 欢迎来到莫与的博客,第一篇记录了一下怎么写一篇博客,以方便之后写博客~ #从配置说起下载安装Git与Node.js略过 1.安装he ...