CF558E A Simple Task 线段树
发布日期:2021-06-28 19:59:47
浏览次数:2
分类:技术文章
本文共 2553 字,大约阅读时间需要 8 分钟。
题解:
这种题之前做过一个类似的题目,也是关于选择区间然后给区间进行排序。 这种题用线段树把排序转换成区间修改区间求和即可。 类似的题目:首先我们看到这个题是针对于字母进行排序的,区间操作很像线段树,那么如何把他转换成线段树呢?
我们考虑他只有26个字母,那么我们是否可以转换成维护这26个字母呢? 对于每一段区间,我们查询每个字母出现的个数。 然后按照题目要求(升序还是降序)然后从l到r依次填从小到大填入字母即可。 转换为了区间修改和区间查询操作。#include//#define int long long#define ll long longconst int maxn=2e5+10;using namespace std;const int p=1e9+10;int sum[maxn*4][30];int a[maxn];int lazy[maxn];void push_up(int node){ for(int i=1;i<=26;i++){ sum[node][i]=sum[node*2][i]+sum[node*2+1][i]; }}void build(int node,int start,int ends){ if(start==ends){ sum[node][a[start]]++; return ; } int mid=(start+ends)/2; build(node*2,start,mid); build(node*2+1,mid+1,ends); push_up(node);}void push_down(int node,int start,int ends){ if(lazy[node]){ for(int i=0;i<=26;i++){ sum[node*2][i]=sum[node*2+1][i]=0; } int mid=(start+ends)/2; sum[node*2][lazy[node]]=mid-start+1; sum[node*2+1][lazy[node]]=ends-mid; lazy[node*2]=lazy[node*2+1]=lazy[node]; } lazy[node]=0;}void update(int node,int start,int ends,int l,int r,int val){ if(start>=l&&ends<=r){ lazy[node]=val; for(int i=1;i<=26;i++) sum[node][i]=0; sum[node][val]=ends-start+1; return ; } push_down(node,start,ends); int mid=(start+ends)/2; if(l<=mid) update(node*2,start,mid,l,r,val); if(mid =l&&ends<=r){ for(int i=1;i<=26;i++){ ans[i]+=sum[node][i]; } return ; } int mid=(start+ends)/2; push_down(node,start,ends); if(l<=mid) query(node*2,start,mid,l,r); if(mid >n>>q; string s; cin>>s; for(int i=0;i >l>>r>>opt; memset(ans,0,sizeof ans); if(opt==1){ query(1,1,n,l,r); int pos=l; for(int i=1;i<=26;i++){ if(ans[i]){ update(1,1,n,pos,pos+ans[i]-1,i); pos=pos+ans[i]; } } } else{ query(1,1,n,l,r); int pos=l; for(int i=26;i>=1;i--){ if(ans[i]){ update(1,1,n,pos,pos+ans[i]-1,i); pos=pos+ans[i]; } } } } memset(ans,0,sizeof ans); for(int i=1;i<=n;i++){ query(1,1,n,i,i); for(int i=1;i<=26;i++){ if(ans[i]){ cout<<(char)(i+'a'-1); ans[i]--; } } }}
转载地址:https://blog.csdn.net/xxxxxiao123/article/details/115538696 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月19日 04时33分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CTFSHOW WEB入门 命令执行做题笔记(持续更新)
2019-04-29
应急响应流程
2019-04-29
Vulhub Flask SSTI漏洞复现
2019-04-29
CTFSHOW 文件包含
2019-04-29
Apache HTTPD 换行解析漏洞
2019-04-29
Vulhub Apache HTTPD 多后缀解析漏洞
2019-04-29
CTFshow 反序列化
2019-04-29
java中调用js函数的方法
2019-04-29
可落地的云游戏解决方案
2019-04-29
Http协议原理分析
2019-04-29
HTTP协议工作原理、工作过程
2019-04-29
抖音视频批量去水印,抖音视频批量解析下载方法 - 2020年6月最新有效
2019-04-29
linux下redis安装遇到的问题及解决办法
2019-04-29
历史数据解决方案
2019-04-29
【基础+实战】JVM原理及优化系列之一:JVM体系结构
2019-04-29
【基础+实战】JVM原理及优化系列之二:JVM内存管理
2019-04-29
【基础+实战】JVM原理及优化系列之三:JVM垃圾收集器
2019-04-29
【基础+实战】JVM原理及优化系列之四:JVM参数说明
2019-04-29
【基础+实战】JVM原理及优化系列之五:JVM默认设置
2019-04-29
【基础+实战】JVM原理及优化系列之六:JVM主要调优参数
2019-04-29