#牛客春招刷题训练营# + 链接

显然最终的字母还是原串的字母,只是重复了很多遍

维护一下原串每个字母每次操作后重复多少遍就好啦

#include <bits/stdc++.h>
using namespace std;

const int N = 1024;
char s[N];
int c[N];

int main() {
    int n, q, l, r;
    scanf("%d%d", &n, &q);
    scanf("%s", s);
    vector<int> ve(n, 1);
    while (q--) {
        scanf("%d%d", &l, &r);
        int pre = 0, now = 0;
        for (int i = 0; i < n && pre <= r; i++) {
            now = pre + ve[i];
            if (now < l) {
                pre = now;
                continue;
            }
            ve[i] += min(r, now) - max(pre + 1, l) + 1;
            pre = now;
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < ve[i]; j++) putchar(s[i]);
    }
    return 0;
}