Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)
题目链接
题目大意
给你一个长度为n的字符串,可以交换相邻两个元素,使得这个字符串翻转,求最少多少种次数改变
题目思路
如果要求数组排序所需要的冒泡次数,那其实就是逆序对
这个也差不多,但是如果是相同字符,用的应该是对应的最近的这个字母。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
int n,cnt[30],ans[maxn],tree[maxn<<2];
char s[maxn];
vector<int> pos[30];
int query(int node,int L,int R,int l,int r){
	if(L<=l&&r<=R){
		return tree[node];
	}
	int mid=(l+r)>>1,sum=0;
	if(mid>=L) sum+=query(node<<1,L,R,l,mid);
	if(mid<R) sum+=query(node<<1|1,L,R,mid+1,r);
	return sum;
}
void update(int node,int l,int r,int pos){
	if(l==r){
		tree[node]++;
		return ;
	}
	int mid=(l+r)>>1;
	if(mid>=pos) update(node<<1,l,mid,pos);
	else update(node<<1|1,mid+1,r,pos);
	tree[node]=tree[node<<1]+tree[node<<1|1];
}
int main(){
	scanf("%d %s",&n,s+1);
	for(int i=1;i<=n;i++){
		int x=s[i]-'a'+1;
		pos[x].push_back(n-i+1);
	}
	for(int i=n;i>=1;i--){
		int x=s[i]-'a'+1;
		ans[i]=pos[x][cnt[x]++];
	}
	ll pr=0;
	for(int i=1;i<=n;i++){
		int bug=query(1,1,ans[i],1,n);
		pr+=query(1,ans[i],n,1,n);
		update(1,1,n,ans[i]);
	}
	printf("%lld\n",pr);
	return 0;
}
												
											Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal 题解(思维+逆序对)的更多相关文章
- Educational Codeforces Round 96 (Rated for Div. 2)  E. String Reversal  (思维,逆序对)
		
题意:给你一个字符串,每次可以调换现字符串的相邻两个字符,问最少操作多少次使得这个字符串等于其反转过来的字符串. 题解:先考虑字符串中没有相同字符的情况,那么我们每次将目前字符串的最后一个字符一直调换 ...
 - Educational Codeforces Round 96 (Rated for Div. 2) D. String Deletion (思维)
		
题意:有一个\(01\)串,每次操作要先删除一个位置上的元素,然后删除相同前缀和,直到字符串被删完,问最多能操作多少次. 题解: 对于一个长度大于\(1\)的相同前缀,我们最多只能对它操作一次,然后就 ...
 - Educational Codeforces Round 102 (Rated for Div. 2) B. String LCM (构造,思维)
		
题意:给你两个字符串\(a\)和\(b\),找出它们的\(lcm\),即构造一个新的字符串\(c\),使得\(c\)可以由\(x\)个\(a\)得到,并且可以由\(y\)个\(b\)得到,输出\(c\ ...
 - Educational Codeforces Round 96 (Rated for Div. 2)
		
A. Number of Apartments 题意:求方程的解 思路:直接模拟就行 代码: #include<iostream> #include<cstdio> #incl ...
 - Educational Codeforces Round 76 (Rated for Div. 2)E(dp||贪心||题解写法)
		
题:https://codeforces.com/contest/1257/problem/E 题意:给定3个数组,可行操作:每个数都可以跳到另外俩个数组中去,实行多步操作后使三个数组拼接起来形成升序 ...
 - Educational Codeforces Round 92 (Rated for Div. 2) B、C题解
		
TAT 第一场codeforces B. Array Walk #暴力 #贪心 题目链接 题意 有\(a1, a2, ..., an\) 个格子(每个格子有各自分数),最初为1号格(初始分数为\(a1 ...
 - 【Educational Codeforces Round 38 (Rated for Div. 2)】  Problem A-D 题解
		
[比赛链接] 点击打开链接 [题解] Problem A Word Correction[字符串] 不用多说了吧,字符串的基本操作 Problem B Run for your prize[贪心] ...
 - Educational Codeforces Round 65 (Rated for Div. 2) E. Range Deleting(思维+coding)
		
传送门 参考资料: [1]:https://blog.csdn.net/weixin_43262291/article/details/90271693 题意: 给你一个包含 n 个数的序列 a,并且 ...
 - Educational Codeforces Round 73 (Rated for Div. 2)D(DP,思维)
		
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;long long a[300007],b[3 ...
 
随机推荐
- C# 编译器对局部变量的优化
			
C# 编译器对局部变量的优化 C# 的编译器可以对代码进行优化,所以,我们在写代码的时候,可以更多地考虑一下代码的易读性问题. 不考虑基本的对齐和换行美化.看一下局部变量优化问题. C# 示例代码 例 ...
 - 企业级数据大屏设计如何实现,div+html+echarts
			
大屏是什么? 大屏设计是最近比较流行的概念,一般按照功能来分有几种: 1. 可交互的触摸屏,大多运用在互动教学课程或者报告演示现场,用户可结合交互操作来阐述具体内容.设计师需要对交互形式和传达内容作统 ...
 - VisualCalendar-可视化日历的创建
			
public class VisualCalendar { public static void main(String[]args){ System.out.println("请输入日期( ...
 - K8S环境快速部署Kafka(K8S外部可访问)
			
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
 - Vue+Antd搭配百度地图实现搜索定位等功能
			
前言 最近,在做vue项目的时候有做到选择地址功能,而原项目中又引入了百度地图,所以我就打算通过使用百度地图来实现地址搜索功能啦. 本次教程可能过于啰嗦,所以这里先放上预览地址供大家预览--点我预览, ...
 - Unity正交相机智能包围物体(组)方案
			
Unity正交相机智能包围物体(组)方案 目录 Unity正交相机智能包围物体(组)方案 一.技术背景 二.相关概念 2.1 正交摄像机 2.2 正交相机的Size 2.3 相机的Aspect 2.4 ...
 - 1.流程控制--if
			
流程控制--if -*- coding:utf-8 -*- #定义字符编码 1.判断条件if age = input("输入年龄:") #将交互式输入内容赋值给age,默认内容为字 ...
 - Reactor详解之:异常处理
			
目录 简介 Reactor的异常一般处理方法 各种异常处理方式详解 Static Fallback Value Fallback Method Dynamic Fallback Value Catch ...
 - 学习笔记——ESP8266项目的例子编译时发生cannot find -lstdc++问题的解决
			
在尝试对进行ESP8266项目的例子进行编译时发生cannot find -lstdc++问题 第一想法是安装libstdc++,结果安装时又发生了下面的情况: 再次查找原因,最后发现当前安装的交叉编 ...
 - JAVA基础之接口与内部类
			
接口与内部类 目录 接口与内部类 1. Lambda表达式 1. 关于懒计算 2. Predicate接口 3. 关于方法引用 4. 关于构造器引用 5. 关于变量的作用域 2. 内部类 1. 局部内 ...