题目链接:Letters Removing

题意:

  给你一个长度为n的字符串,给出m次操作。每次操作给出一个l,r和一个字符c,要求删除字符串l到r之间所有的c。

题解:

  看样例可以看出,这题最大的难点在于每次在字符串中删除了前面的字符会对后面的字符产生影响。如何确定当前l和r所指的字符?这里由于对字符的位置查询相当于单点操作区间查询,可以用树状数组维护字符串的前缀和,这样就可以确定l和r的位置了(二分+树状数组 : 复杂度(log(n)×log(n)))。再把所有的字符放到set里面进行删除操作。注意这里因为字符的数量比较少,可以每一个字符用一个set放所含这个字符的位置,不然如果只用一个set放整个字符串进行暴力的话会超时。$.$

 #include<bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5+;
int vec[MAX_N];
int res[MAX_N];
char tran[MAX_N];
int N,M,T;
set<int> st[];
set<int>::iterator it,ite;
vector<int> temp;
int name(char x)
{
if(x>='a'&&x<='z'){
return x-'a'+;
}else if(x>=''&&x<=''){
return x-''++;
}else{
return x-'A'++;
}
}
void add(int x,int num)
{
for(; x<=N; x+=(x&-x))
vec[x] += num;
}
int sum(int x)
{
int ans = ;
for(; x>; x-=(x&-x))
ans += vec[x];
return ans;
}
int two_find(int x)
{
int l=,r=N+;
while(l<r)
{
int mid = (l+r)/;
if(sum(mid) < x)l = mid+;
else r = mid;
}
return l;
}
int main()
{
for(int i=;i<;i++) st[i].clear();
memset(res,,sizeof(res));
cin>>N>>M;
getchar();
for(int i=; i<=N; i++)
{
char t;
scanf("%c",&tran[i]);
st[name(tran[i])].insert(i);
add(i,);
}
int l,r;
char t;
for(int i=; i<M; i++)
{
temp.clear();
scanf("%d%d",&l,&r);
getchar();
scanf("%c",&t);
int x = name(t);
int pos1 = two_find(l);
int pos2 = two_find(r);
it = st[x].lower_bound(pos1);
while(it != st[x].end() && *it<=pos2)
{
add(*it,-);
res[*it] = ;
temp.push_back(*it);
it++;
}
for(int i=; i<temp.size(); i++) st[x].erase(temp[i]);
}
for(int i=;i<=N;i++) if(!res[i]) printf("%c",tran[i]);
printf("\n");
return ;
}

Codeforces 899 F. Letters Removing (二分、树状数组)的更多相关文章

  1. codeforces 899F Letters Removing set+树状数组

    F. Letters Removing time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. CodeForces 1058 F Putting Boxes Together 树状数组,带权中位数

    Putting Boxes Together 题意: 现在有n个物品,第i个物品他的位置在a[i],他的重量为w[i].每一个物品移动一步的代价为他的w[i].目前有2种操作: 1. x y 将第x的 ...

  3. 【BZOJ-2527】Meteors 整体二分 + 树状数组

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 831  Solved: 306[Submit][Stat ...

  4. bzoj千题计划316:bzoj3173: [Tjoi2013]最长上升子序列(二分+树状数组)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3173 插入的数是以递增的顺序插入的 这说明如果倒过来考虑,那么从最后一个插入的开始删除,不会对以某 ...

  5. zoj-3963 Heap Partition(贪心+二分+树状数组)

    题目链接: Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence ...

  6. 【bzoj4009】[HNOI2015]接水果 DFS序+树上倍增+整体二分+树状数组

    题目描述 给出一棵n个点的树,给定m条路径,每条路径有一个权值.q次询问求一个路径包含的所有给定路径中权值第k小的. 输入 第一行三个数 n和P 和Q,表示树的大小和盘子的个数和水果的个数. 接下来n ...

  7. 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组

    题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...

  8. 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  9. BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组

    BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...

随机推荐

  1. PAGELATCH_x 等待--转载

    转自出处:http://www.cnblogs.com/xwdreamer/archive/2012/08/30/2663232.html 0.参考文献 Microsoft SQL Server企业级 ...

  2. 为什么树莓派不会受到 Spectre 和 Meltdown 攻击

    最近爆出来的 Intel CPU 的底层漏洞可谓是影响巨大,过去20年的电脑都可能会受影响.前几天 Raspberry Pi 的官方 Twitter(@Raspberry_Pi) 转推了这篇文章,通过 ...

  3. Spring中配置数据源的四种方式

    1.spring自带的数据源 <bean id="dataSource" class="org.springframework.jdbc.datasource.Dr ...

  4. 嵌入式linux下wifi网卡的使用(四)——应用程序sub_supplicant编译

    有readme先看看readme看看有没有编译的方法 里面告诉我们安装时可能会依赖某些库事实证明会依赖openssl库,之前也使用过openssl 这个文件中有个defualtconfig,先用它做. ...

  5. Python可视化库Matplotlib的使用

    一.导入数据 import pandas as pd unrate = pd.read_csv('unrate.csv') unrate['DATE'] = pd.to_datetime(unrate ...

  6. 消费五分钟,小白也能了解的经典技术:关于IP负载均衡(LVS之NAT)

    这里准备以两篇文章来大概讲述一下LVS负载均衡 NAT TUN/DR和共享存储 前言: 为什么搭建LVS: 若一台服务器只能支持10人在线.那么有100人访问,则需要多少台服务器. 这个不言而喻:10 ...

  7. Cent OS 6.5下源码安装php7.2

    1.安装php需要的扩展 # yum install libxml2 libxml2-devel openssl openssl-devel libcurl libcurl-devel libjpeg ...

  8. [转载]CentOS 7安装Gnome GUI 图形界面

    原文链接:http://www.centoscn.com/image-text/config/2015/0528/5552.html 当你安装centos服务器版本的时候,系统默认是不会安装 Cent ...

  9. UML 类图基础

    先留个坑, 后续再填 UML 类图中主要包括以下几种关系: 1. 泛化: 定义:继承关系,指定子类继承父类的所有特征与行为. 图形:三角形箭头,指向父类.         2. 实现 定义:类与接口的 ...

  10. tornado SSL 证书获取与服务器配置

    转载注明出处: http://www.cnblogs.com/ityoung/p/8296088.html 自动化测试/持续集成/测试开发 QQ交流群: 70160503 服务端生成证书 进入 ope ...