题目链接:http://codeforces.com/contest/558/problem/E
题意: 给定一个字符串, m次操作, 每次操作一个区间, 0表示让这个区间降序, 1 表示升序, 问最后字符串的样子。
字符集只有26个,所以线段树维护区间内每个字母的数量,对于排序操作就直接暴力进行区间覆盖。
#include<bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i <= (b); i++)
#define per(i, a, b) for(int i = (a); i >= (b); i--)
#define ls (o<<1)
#define rs (o<<1|1)
#define mid (l+r>>1)
#define ll long long
using namespace std;
const int N = 1e5+100;
int i,n,m,h,t;
char s[N];
struct node{
int v[30],lz,len;
}T[4*N];
void up(int o) {
rep(i, 0, 25) T[o].v[i] = T[ls].v[i]+T[rs].v[i];
}
void build(int o,int l,int r) {
T[o].len = r-l+1;
T[o].lz = -1;
if(l==r) {
T[o].v[s[l]-'a']++;
return;
}
build(ls,l,mid);
build(rs,mid+1