CF558E A Simple Task
CF558E A Simple Task WOC怎么又一个simple task? 操作就是区间排序+最终询问 第一反应是Splay(不对呀,我明明不会Splay的......😀) 后来看了看,感觉Splay不可做(我连Splay都不会,怎么就觉得不能做了) 感觉线段树比较靠谱 观察题目发现小写字母只有26个(常识) 往元素上去做文章 将排序用另外一种方式呈现 用桶排序的思想 开一个桶记录区间1~26字母出现的个数 然后区间赋值,达到排序目的 输出只要遍历一下线段树的叶子节点即可 代码: #include<bits/stdc++.h> using namespace std; const int N=100005; int n,m; int a[N]; int cal[30]; struct Sugment_Tree{ int LZT[N<<2]; int t[N<<2][30]; #define il inline #define mid (l+r)/2 Sugment_Tree(){memset(t,0,sizeof(t));memset(LZT,0,sizeof(LZT));} il void push_up(int num){ for(int i=1;i<=26;i++){t[num][i]=t[num<<1][i]+t[num<<1|1][i];} } il void