HZOJ string

正解炸了……

考试的时候想到了正解,非常高兴的打出来了线段树,又调了好长时间,对拍了一下发现除了非常大的点跑的有点慢外其他还行。因为复杂度算着有点高……

最后正解死于常数太大……旁边的lyl用同样的算法拿了90分我却拿了个暴力的分40……花了那么多时间一分没多拿原地爆炸……

由于大部分时间押在了T1,然后考试就炸了……

题解:

因为字符串长度虽然很大,但是只有26个字符,考虑桶排,用线段树每个节点开一个26的桶,维护这个区间中各个数的个数,对于排序就可以拆成26次区间赋值。然而这样的down函数的复杂度是26,于是整个算法的复杂度就成了$nlog_n*26^2$,40分成功炸掉(加两个优化可以搞到60分),然后就有lyl及其没有素质地给他循环展开了,AC……

还是说正解吧,和‘花神游历各国’类似,线段树维护这一段的值,不一样则为0,本来以为这样会很慢,但是它会越来越快:每次排序最多增加2个块,但这种增加是有限制的,大部分情况下块是在减少,所以它会越来越快。由于此时的down是O1的,于是总复杂度$nlog_n*26$,成功A掉。

 

  1 #include<iostream>
  2 #include<cstring>
  3 #include<cstdio>
  4 #define MAXN 100010
  5 using namespace std;
  6 struct tree
  7 {    
  8     int l,r,sum;
  9     #define l(x) tr[x].l
 10     #define r(x) tr[x].r
 11     #define ls(x) (x*2)
 12     #define rs(x) ((ls(x))+1)
 13     #define sum(x) tr[x].sum
 14 }tr[MAXN*100];
 15 char a[MAXN];
 16 int n,m,yz[MAXN];
 17 void pushup(int x)
 18 {
 19     if(l(x)==r(x))return;
 20     sum(x)=(sum(ls(x))==sum(rs(x))?sum(ls(x)):0);
 21 }
 22 void build(int l,int r,int x)
 23 {
 24     l(x)=l,r(x)=r;
 25     if(l==r){sum(x)=a[l];yz[l]=x;return;}
 26     int mid=(l+r)>>1;
 27     build(l,mid,ls(x));
 28     build(mid+1,r,rs(x));
 29     pushup(x);
 30 }
 31 void down(int x)
 32 {
 33     if(!sum(x))return;
 34     if(l(x)!=r(x))sum(ls(x))=sum(rs(x))=sum(x);
 35 }
 36 void add(int l,int r,int x,int data)
 37 {
 38     if((l(x)>=l&&r(x)<=r)||sum(x)==data)
 39     {sum(x)=data;down(x);return;}    
 40     down(x);
 41     int mid=(l(x)+r(x))>>1;
 42     if(l<=mid)add(l,r,ls(x),data);
 43     if(r>mid) add(l,r,rs(x),data);
 44     pushup(x);
 45 }
 46 int t[27];
 47 void ask(int l,int r,int x)
 48 {
 49     down(x);
 50     if(l>r(x)||r<l(x))return;
 51     if(l<=l(x)&&r>=r(x)&&sum(x))
 52     {
 53         t[sum(x)]+=r(x)-l(x)+1;
 54         return;
 55     }
 56     down(x);
 57     int mid=(l(x)+r(x))>>1;
 58     if(l<=mid)ask(l,r,ls(x));
 59     if(r>mid) ask(l,r,rs(x));
 60 }
 61 void work(int x,int l,int r)
 62 {
 63     memset(t,0,sizeof(t));
 64     ask(l,r,1);
 65     int tl=l;
 66     if(x==1)
 67     {
 68         for(register int i=1;i<=26;i++)
 69         if(t[i])
 70         {
 71             add(tl,tl+t[i]-1,1,i);
 72             tl=tl+t[i];
 73         }
 74     }
 75     else 
 76     {
 77         for(register int i=26;i>=1;i--)
 78         if(t[i])
 79         {
 80             add(tl,tl+t[i]-1,1,i);
 81             tl=tl+t[i];
 82         }
 83     }    
 84 }
 85 void dfs(int x)
 86 {
 87     down(x);
 88     if(l(x)==r(x))return;
 89     dfs(ls(x)),dfs(rs(x));
 90 }
 91 inline int read();
 92 signed main()
 93 {
 94 //    freopen("in.txt","r",stdin)    ;
 95 
 96     n=read(),m=read();    
 97     char ooo=getchar();int len=0;
 98     while(ooo<'a'||ooo>'z')ooo=getchar();    
 99     while(ooo>='a'&&ooo<='z'){a[++len]=ooo-'a'+1;ooo=getchar();}
100     build(1,n,1);
101     int x,l,r;
102     for(register int i=1;i<=m;++i)
103     {
104         l=read(),r=read(),x=read();
105         work(x,l,r);    
106     }
107     dfs(1);
108     for(int i=1;i<=n;i++)    
109         putchar(sum(yz[i])+'a'-1);
110     puts("");
111 }
112 inline int read()
113 {
114     int s=0;char a=getchar();
115     while(a<'0'||a>'9')a=getchar();
116     while(a>='0'&&a<='9'){s=s*10+a-'0';a=getchar();}
117     return s;
118 }
View Code

 

转载于:https://www.cnblogs.com/Al-Ca/p/11286365.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity3D入门其实很简单

在上次发布拙作后&#xff0c;有不少童鞋询问本人如何学习Unity3D。本人自知作为一名刚入门的菜鸟&#xff0c;实在没有资格谈论这么高大上的话题&#xff0c;生怕误导了各位。不过思来想去&#xff0c;决定还是写一些自己的经验&#xff0c;如果能给想要入门U3D的您一些启发&a…

4. HTML表单标签

表单是网页中最常见的元素&#xff0c;也是用户和我们交互的重要手段&#xff0c;在网站中的登录、注册、信息更新这些功能都是依赖表单实现的。在HTML中对于表单提供了一系列的标签&#xff0c;即输入框、下拉框、按钮、文本域&#xff0c;如下是一个最常见的表单结构内容&…

为Lucene选择快速唯一标识符(UUID)

大多数使用Apache Lucene的搜索应用程序都会为每个索引文档分配唯一的ID&#xff08;即主键&#xff09;。 尽管Lucene本身不需要这样做&#xff08;它可能不太在乎&#xff01;&#xff09;&#xff0c;但应用程序通常需要它以后通过其外部ID替换&#xff0c;删除或检索该文档…

ubuntu16.04设置静态ip

最近在课堂上&#xff0c;有很多同学反映在搭建环境的时候&#xff0c;虚拟机ip经常变&#xff0c;那么我们配置好的web服务可能就不能用了。下面讲一下如何在ubuntu上面设置静态ip 1&#xff1a;首先我们确认一下ubuntu的版本 cat /etc/issue 或者sudo lsb_release -a或者unam…

Maven常用的构建命令

Maven常用命令&#xff1a; Maven库&#xff1a; http://repo2.maven.org/maven2/ Maven依赖查询&#xff1a; http://mvnrepository.com/ 一&#xff0c;Maven常用命令&#xff1a; 1. 创建Maven的普通Java项目&#xff1a; mvn archetype:create-DgroupIdpackageName-Dartifa…

课时85.层叠性(掌握)

1.什么是层叠性&#xff1f; 层叠性就是CSS处理冲突的一种能力。 这个字体最终会变为红色 注意点&#xff1a; 层叠性只有在多个选择器选中“同一个标签”,然后又设置了“相同的属性”&#xff0c;才会发生层叠性。 CSS全称&#xff1a;Cascading StyleSheet 层叠样式表&am…

SetProcessWorkingSetSize减少内存占用

系统启动起来以后&#xff0c;内存占用越来越大&#xff0c;使用析构函数、GC.Collect什么的也不见效果&#xff0c;后来查了好久&#xff0c;找到了个办法&#xff0c;就是使用 SetProcessWorkingSetSize函数。这个函数是Windows API 函数。下面是使用的方法&#xff1a;[Syst…

Spring Boot 与消息 (JMS、AMQP、RabbitMQ)

RabbitMQ教程 - 鸟哥的专栏 - CSDN博客 一、概述 大多应用中&#xff0c;可通过消息服务中间件来提升系统异步通信、扩展解耦能力消息服务中两个重要概念&#xff1a;消息代理&#xff08;message broker)和目的地&#xff08;destination) 当消息发送者发送消息以后&#xff0…

JavaOne 2014 –有关提交的一些初步分析

这些天时间不多了。 并行发生的事情如此之多&#xff0c;当然&#xff0c;最重要的Java会议就是一切。 JavaOne 2014已经关闭了CfP门&#xff0c;投票正在进行中。 程序委员会几乎没有什么可以谈论的&#xff0c;但是去年跳过了这种分析之后&#xff0c;现在是我该寻求许可的时…

【译】XNA Shader 程序设计(二)

XNA Shader 程序设计 教程2 - 漫反射 大家好&#xff0c;今天我们将在教程一的基础上继续学习&#xff0c;在光照算式中加上漫反射光。 漫反射光 环境光计算等式为&#xff1a; I Aintensity * Acolor 漫反射基于这个等式&#xff0c;添加了一道有方向的光线&#xff1a; I A…

A股滚动净利润增速最高排名

最近2年&#xff08;共8个季度&#xff09;的滚动净利润都在增长&#xff0c;且平均增速超过10%。 计算举例&#xff1a;滚动净利润增速 ((2018Q1 到 2018Q4的净利润之和) / (2017Q4 到 2018Q3的净利润之和) -1) * 100%。 预测下季度&#xff1a;依据以往的增速&#xff0c;进…

Java 8 Friday:让我们弃用那些旧版库

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

Educational Codeforces Round 10

652A - Gabriel and Caterpillar 20171128 按题意模拟即可 #include<stdlib.h> #include<stdio.h> #include<math.h> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int h1,h2,a,b,ans1; int main()…

内存不足:杀死进程或牺牲孩子

现在是早上6点。 我清醒地总结了导致我太早醒来的电话的事件序列。 这些故事开始时&#xff0c;我的电话警报响了。 困倦而脾气暴躁的我检查了电话&#xff0c;看我是否真的疯了以至于无法在凌晨5点设置唤醒警报。 不&#xff0c;这是我们的监视系统&#xff0c;表明Plumbr服务…

将Array、Dictionary等集合类的序列化和反序列化

Objective-C的集合类序列化到文件中或者从文件中反序列化其实很简单&#xff0c;请看下面的示例代码&#xff1a; NSArray *array [NSArray arrayWithObjects:"Hefeweizen", "IPA", "Pilsner", "Stout", nil];NSDictionary *dictiona…

职场交流:一位软件工程师的7年总结

2009年05月13日15:06  来源&#xff1a;1、分享第一条经验&#xff1a;“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友 对这个道理有些体会吧。但我相信这一点也很重要&#xff1a;“重要的道理…

JavaFX 8u20天的未来过去(始终在最前面)

自从我发布有关JavaFX的主题以来已经有很长时间了。 因此&#xff0c;如果您仍在追随&#xff0c;那就太棒了&#xff01; 介绍 在这篇博客文章中&#xff0c;我想写一篇关于从JavaFX 8 update 20开始的非常酷的功能的博客&#xff0c;该功能使您的应用程序始终位于其他应用程…

cocos creator实战-(三)简单例子摇杆控制角色移动

&#xff08;待完善&#xff0c;给玩家加上摄像机跟随效果&#xff09; 1、stick监听cc.Node.EventType.TOUCH_MOVE事件&#xff0c;获取tick移动的坐标和朝向&#xff0c;限制移动的范围 2、根据stick的朝向&#xff0c;每帧更新player的位置和方向 // 摇杆代码 joy_stick.jsc…

php构造数组,并把多数组插入php文件

晚上做的一点东西&#xff0c;发出来大家共享下&#xff01; Code<?php //php 链接数据库mysql_connect("localhost", "root", "hicc") or die("Could not connect: " . mysql_error());mysql_select_db("babyker");$re…

针对新手的Java EE7和Maven项目–第6部分

从前面的部分恢复 第1 部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分 &#xff0c; 第4 部分 &#xff0c; 第5部分 在上一篇文章&#xff08;第5部分&#xff09;中&#xff0c;我们发现了如何使用Arquillian&#xff08;我们的EJB服务&#xff09;进行单元测试&#xf…