首页 > 其他分享 >CF1234

CF1234

时间:2024-11-08 14:30:53浏览次数:1  
标签:队列 树状 int CF1234 即可 数组

CF1234A

简单题,求一下平均数,因为他好像不能有小数,所以向上取整即可

CF1234B

这道题还分B1,B2,我一下直接全过了

维护一个长度为k的队列,直接照着它模拟

然后用map(因为有负数)来判断这个数是否在队列中即可

CF1234C

你会发现每种水管因为可以旋转,所以只分两种情况,1,2是一种情况,3,4,5,6是另一种

然后因为只有两行,所以只会有唯一的路径到达

然后按照情况分类讨论判断是否能到达即可

CF1234D

树状数组一眼题

分别对每一个小写字母开一个树状数组,单点修改,区间查询即可

代码没调出来,不知道哪里有错了,真服了。

有没有大佬能帮我看一看QWQ

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int q,op,p,l,r,len;
int a[N];
char s[N],c,tr[40][N];
int lowbit(int x){
	return x&(-x);
}
void add(int x,int z,int num){
	for(;x<=N;x+=lowbit(x)){
		tr[z][x]+=num;
	}
}
int query(int x,int z){
	int res=0;
	for(;x;x-=lowbit(x)){
		res+=tr[z][x];
	}
	return res;
}
int main(){
	scanf("%s",s+1);
	len=strlen(s+1);
	for(int i=1;i<=len;i++){
		a[i]=s[i]-'a'+1;
		add(i,a[i],1);
	}
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		scanf("%d",&op);
		if(op==1){
			scanf("%d %c",&p,&c);
			add(p,a[p],-1);
			a[p]=c-'a'+1;
			add(p,a[p],1);
		}
		else{
			int ans=0;
			scanf("%d%d",&l,&r);
			for(int i=1;i<=26;i++){
				if((query(r,i)-query(l-1,i))!=0){
					ans++;
				}
			}
			printf("%d\n",ans);
		}
	}
}

标签:队列,树状,int,CF1234,即可,数组
From: https://www.cnblogs.com/zcxnb/p/18535015

相关文章

  • CF1234F Yet Another Substring Reverse
    CF1234FYetAnotherSubstringReverse状压dp+高维前缀和一个很显然的发现是最长子串长度不会超过字符集。那么如果没有这个操作,是很简单的,我们看看多了这个操作意味着什么。对于一个子串,考虑一次翻转对它的影响。在它内部的翻转肯定是没有意义的;我们一定有一个操作能将任意......
  • CF1234F 题解
    blog。小清新题,下文\(V=20\)即值域。反转操作,本质就是选两个不相交连续段拼起来。显然合法的最终串长度一定\(\leV\)。将这些合法串预处理出来,那么每个串都对应一个「字母集合」。随便DP一下,求出所有集合中,的最大的合法「字母集合」大小。\(dp_{\smallU}\)就是只选一......
  • CF1234(Div. 3) 题解(A to E)
    AEqualizePricesAgain题解题目大意\(n\)个商品,每个商品价格为\(a_i\),求一个最小的价格\(x\),使得不亏本(即\(\sum\limits_{i=1}^n{(a_i-x)}\ge0\))。解题思路输出平均数向上取整(即\(\left\lceil(\sum\limits_{i=1}^n{a_i})\divn\right\rceil\))即可。代码#include<bit......