CodeForcesF. Letters Removing
Posted ONION_CYC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForcesF. Letters Removing相关的知识,希望对你有一定的参考价值。
【题意】给定只含小写字母、大写字母和数字的字符串,每次给定一个范围要求删除[l,r]内的字符c(l和r具体位置随删除变动),求m次操作后的字符串。n<=2*10^5。
【算法】树状数组+平衡树(set)
【题解】因为坐标是序列变动后的,动态坐标可以转化为找到第l个存在的数字到第r个存在的数字之间的范围。
将序列中存在记为1,删除记为0,转化为找前缀和恰好为l和r的位置,这是树状数组的经典操作,详见这篇题解介绍的方法(简单的排名功能)
找到l和r在原数组的位置后,接下来需要删除。因为字符个数不多,对每个字符开一个set记录位置,然后lower_bound后逐个删除即可。
复杂度O(n log n)。
#include<cstdio> #include<cstring> #include<set> #include<cctype> #include<algorithm> using namespace std; const int maxn=200010,M=62; int n,m,a[maxn],c[maxn]; char S[maxn],SS[10]; set<int>s[63]; set<int>::iterator it,itt; int read(){ char c;int s=0,t=1; while(!isdigit(c=getchar()))if(c==\'-\')t=-1; do{s=s*10+c-\'0\';}while(isdigit(c=getchar())); return s*t; } #define lowbit(x) (x&-x) void modify(int x){for(int i=x;i<=n;i+=lowbit(i))c[i]--;} int ask(int x){int as=0;for(int i=x;i>=1;i-=lowbit(i))as+=c[i];return as;} int find(int x){ int num=0,p=0; for(int i=20;i>=0;i--)if(p+(1<<i)<=n&&num+c[p+(1<<i)]<x)num+=c[p+=(1<<i)]; return p+1; } int p(char c){ if(\'a\'<=c&&c<=\'z\')return c-\'a\'+1; if(\'A\'<=c&&c<=\'Z\')return c-\'A\'+27; return c-\'0\'+53; } int main(){ n=read();m=read(); scanf("%s",S+1); for(int i=1;i<=n;i++){ a[i]=p(S[i]); s[a[i]].insert(i); } for(int i=1;i<=n;i++)c[i+lowbit(i)]+=++c[i]; for(int i=1;i<=m;i++){ int l=find(read()),r=find(read()),x; scanf("%s",SS);x=p(SS[0]); it=s[x].lower_bound(l); while(it!=s[x].end()&&*it<=r)modify(*it),itt=it,it++,s[x].erase(itt); } for(int i=1;i<=n;i++)if(ask(i)-ask(i-1))printf("%c",S[i]); return 0; }
以上是关于CodeForcesF. Letters Removing的主要内容,如果未能解决你的问题,请参考以下文章
CodeforcesF2. Complete the Projects (hard version) (贪心+贪心+01背包)
javascript [删除元素,如果存在另一个元素]这个片段将找到id / class,如果它有任何内容(aka。children),那么它将remo
sh Git Tags和Brancheshttp://makandracards.com/makandra/621-git-delete-a-branch-local-or-remotehttp://
sh Git Tags和Brancheshttp://makandracards.com/makandra/621-git-delete-a-branch-local-or-remotehttp://
Akka log-dead-letters 和 log-dead-letters-during-shutdown 不起作用