CF240F.TorCoder

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

有一个叫做 Leo 的男孩从不缺席任何 TorCoder 比赛。在上一场编号为 100666 的 TorCoder 比赛中,Leo 遇到了如下问题。他得到了一个由 nn 个小写英文字母组成的字符串 ss,以及 mm 个询问。每个询问由一对整数 li,ril_{i}, r_{i} (1≤li≤ri≤n)(1 \leq l_{i} \leq r_{i} \leq n) 描述。

我们将字符串中的字母从左到右编号为 1 到 nn,即 s=s1s2…sns = s_{1}s_{2}\ldots s_{n}。

对于每个询问,他必须交换字符串 ss 中下标从 lil_{i} 到 rir_{i}(包括两端)的字母,使得子串 (li,ri)(l_{i}, r_{i}) 变成回文。如果有多种字母排列能达到这个目的,你应选择使子串 (li,ri)(l_{i}, r_{i}) 字典序最小的方案。如果不存在这样的排列,则忽略本次询问(即字符串 ss 保持不变)。

众所周知,在 TorCoder 比赛中,输入行数和数组大小从不会超过 60,因此 Leo 轻松解决了这个问题。你的任务是在数据规模更大的情况下完成这个问题。给定字符串 ss 和 mm 个操作,请输出全部 mm 次操作后所得的字符串。

输入格式

从文件 input.txt 中读入数据。

第一行包含两个整数 nn 和 mm (1≤n,m≤105)(1 \leq n, m \leq 10^{5})——表示字符串长度和询问个数。

第二行包含长度为 nn 的小写英文字母字符串 ss。

接下来的 mm 行中,每行包含两个整数 li,ril_{i}, r_{i}(1≤li≤ri≤n1 \leq l_{i} \leq r_{i} \leq n),表示一个询问。

输出格式

输出到文件 output.txt 中。

一行输出经过 mm 次操作之后得到的字符串。按输入顺序处理所有操作。

输入输出样例

  • 输入#1

    7 2
    aabcbaa
    1 3
    5 7
    

    输出#1

    abacaba
    
  • 输入#2

    3 2
    abc
    1 2
    2 3
    

    输出#2

    abc
    

说明/提示

一个长度为 nn 的字符串 s=s1s2…sns=s_{1}s_{2}\ldots s_{n} 的子串 (li,ri) (1≤li≤ri≤n)(l_{i}, r_{i})\ (1\le l_{i}\le r_{i}\le n) 是序列 slisli+1…sris_{li}s_{li+1}\ldots s_{ri}。

如果一个字符串从左到右和从右到左读都相同,则称其为回文字符串。

长度为 pp 的字符串 x1x2…xpx_{1}x_{2}\ldots x_{p} 的字典序小于长度为 qq 的字符串 y1y2…yqy_{1}y_{2}\ldots y_{q},当且仅当:
要么 p<qp < q 且 x1=y1,x2=y2,…,xp=ypx_{1}=y_{1},x_{2}=y_{2},\ldots ,x_{p}=y_{p},
要么存在某个数 r (r<p,r<q)r\ (r<p,r<q),使得 x1=y1,x2=y2,…,xr=yrx_{1}=y_{1},x_{2}=y_{2},\ldots ,x_{r}=y_{r} 且 xr+1<yr+1x_{r+1}<y_{r+1}。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页