11.02 校内模拟赛 题 长者题解和自身体会

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e5+10,P=131,P2=13331,MOD=1e9+7;
char a[N],b[5];
int m,po2[N],rt[N],tot,ans[N];
ull po[N];
struct node {ull sumv; int cnt,lc,rc,sumv2;
} T[N*22];
inline void pushup(int p) {T[p].sumv=T[T[p].lc].sumv*po[T[T[p].rc].cnt]+T[T[p].rc].sumv;  //求出字符的hash值 T[p].sumv2=(1ll*T[T[p].lc].sumv2*po2[T[T[p].rc].cnt]+T[T[p].rc].sumv2)%MOD; //求出hash值 T[p].cnt=T[T[p].lc].cnt+T[T[p].rc].cnt; //字符串长度
}
int build(int l,int r) {int p=++tot;  if (l==r) {T[p].sumv=a[l]-'a'; T[p].sumv2=a[l]-'a'; //这里编号1的主席树上根节点存的是(序号) T[p].cnt=1; return p; } //这里略微不懂。。。尬  即cnt意义是字符串长度 int mid=(l+r)>>1; T[p].lc=build(l,mid); //正常动态开点建树 T[p].rc=build(mid+1,r); pushup(p); return p; }  //建树返回树的编号。。注意这里要上放
int insert(int la,int l,int r,int x,int v) {int p=++tot; T[p]=T[la];  //继续动态开点,并且选取模板(我自己的叫法),因为这里是在原字符串基础上搞所以继承他的root if (l==r) {    //如果已经开到了叶节点         T[p].sumv=v; T[p].sumv2=v; return p; }   //那么就记录两个hash值 int mid=(l+r)>>1;  if (x<=mid) T[p].lc=insert(T[la].lc,l,mid,x,v);  //按照动态开点思路,继续向下开开开 else T[p].rc=insert(T[la].rc,mid+1,r,x,v);pushup(p); return p; } //注意这里 的上放
bool query(int x,int y,int l,int r) {      if (l==r) return T[x].sumv<T[y].sumv;    //因为不用MOd所以可以比较大小、、、 int mid=(l+r)>>1;  if (T[T[x].lc].sumv!=T[T[y].lc].sumv||T[T[x].lc].sumv2!=T[T[y].lc].sumv2) return query(T[x].lc,T[y].lc,l,mid);else return query(T[x].rc,T[y].rc,mid+1,r);}
inline bool cmp(int x,int y) {if (T[rt[x]].sumv==T[rt[y]].sumv&&T[rt[x]].sumv2==T[rt[y]].sumv2) return x<y; //判定的是当两个字符串相同时,要判定位置大小 return query(rt[x],rt[y],1,m);} //不然判定的是字符串大小
int main() {int n;scanf("%d%d",&n,&m);scanf("%s",a+1);po[0]=1; po2[0]=1;for (register int i=1; i<=m; ++i) po[i]=po[i-1]*P,po2[i]=1ll*po2[i-1]*P2%MOD;//双哈希, 一个mod,一个不MOd的原因是因为(p1==131,p2==13331) rt[1]=build(1,m);for (register int i=2; i<=n; ++i) {int la,pos; scanf("%d%d%s",&la,&pos,b+1); rt[i]=insert(rt[la],1,m,pos,b[1]-'a'); //这里犯错了,,数据保证了处理到la时 其rt[a]一定已经处理过了。依据(Pi<=i) 插入到主席树中的数据也是字符序号 }for (register int i=1; i<=n; ++i) ans[i]=i; sort(ans+1,ans+n+1,cmp);for (register int i=1; i<=n; ++i) printf("%d ",ans[i]); //剩下的就是书答案了 return 0; //总结这篇程序。。呵呵,直接用hash值表示字符串大小,,你都比我
}

转载于:https://www.cnblogs.com/keydu/p/9977138.html

11.02 长者题解相关推荐

  1. qgc地面站如何导入离线地图_QGC地面站工具下载 QGroundControl(QGC地面站软件) v2018.11.02 免费安装版 下载-脚本之家...

    QGroundControl是非常实用,由dronecode推出的一款专业的地面站软件,这款软件为任何支持MAVLink的无人机提供全面的飞行控制和任务规划,而且同样也为ArduPilot或PX4 P ...

  2. Interview:算法岗位面试—11.02早上上海某银行(上海分行,四大行之一)信息技术岗笔试记录

    ML岗位面试:11.02早上上海某银行(上海分行,四大行之一)信息技术岗笔试记录 Interview:算法岗位面试-11.02早上上海某银行(上海分行,四大行之一)信息技术岗笔试记录 导读:预约考点的 ...

  3. 每日学习小记 11/02

    1. 移动前端开发头部标签 1 <!-- Retina iPhone 和 Retina iTouch,114x114 像素,可以没有,但推荐有 --> 2 <link rel=&qu ...

  4. star ccm+ 11.02安装

    STAR CCM+是CD-Adapco公司的主打软件,其安装方式较为简单,这里以图文方式详细描述STAR CCM+11.02安装过程. 1 安装准备工作 2 正式安装 3 软件破解 4 软件测试 1 ...

  5. 2019.11.03 test 题解

    2019.11.03 test 题解 五指山 数星星 Stars 涂抹果酱 繁繁的数字 繁繁的游戏 繁繁的队列 大佬们不屑于写博客,于是最菜的我来写篇题解. Day1: Day1 AK... 五指山 ...

  6. O2OA V4 Build 11.02 发布! 全功能分布式企业信息化办公平台

    项目主页 : https://www.oschina.net/p/o2oa 下载地址 : http://www.o2oa.io v4 build 11.02更新内容:  新增功能:     1.[内容 ...

  7. jozj5945. 【NOIP2018模拟11.02】昆特牌

    5945. [NOIP2018模拟11.02]昆特牌 Description 作为一个资深OIer,你被邀请到位于波兰的CDPR总部参观.但没想到你刚一到就遇到了麻烦.昆特牌的数据库发生了故障.原本昆 ...

  8. 2021.11.27月赛题解

    目录 A-可以教学姐画画嘛QAQ B-yh学长的养猪场 C-可以帮学姐通关吗 D-宝藏男孩zks E-为了lh学长!冲鸭! F-可以收下lh学长的小心心♥嘛~~~ G-金身已成,只待渡劫! A-可以教 ...

  9. JZOJ 5947. 【NOIP2018模拟11.02】初音未来

    题目 Hercier作为一位喜爱Hatsune Miku的OIer,痛下决心,将Vocaloid买回了家.打开之后,你发现界面是一个长为n的序列,代表音调,并形成了全排列.你看不懂日语,经过多次尝试, ...

最新文章

  1. 画布canvas标签,并且在画布上画简单的形状
  2. 报名 | AI Time:“ 论道自动机器学习与可解释机器学习”
  3. 网站PC端跟移动端有哪些不同的区别所在?
  4. php抓取搜狗图片,动手抓取搜狗搜索引擎壁纸API接口
  5. c语言用define预处理命令定义,C语言程序设计第八章预处理命令..doc
  6. Java序列化机制原理,java面试题,java基础笔试题,BAT
  7. 未来软件开发的主流方向:规则引擎 (Rule Engine)
  8. 项目微管理23 - 会议
  9. python27的Windows下环境搭建
  10. CAD制图初学入门如何提高CAD绘图效率?
  11. 小程序毕设作品之微信二手交易小程序毕业设计成品(6)开题答辩PPT
  12. 计算机论文题目_基于java的毕业设计题目_50例
  13. 腾讯单点登录系统跨域劫持漏洞
  14. linux 中signal机制如何应用(一)
  15. 2021-09-07 PostMan API请求错误
  16. 深度学习之参数计算(CNN为例)
  17. Java 散点图 数据库 代码_Java 创建Excel散点图
  18. 服务器被腾讯云助手告警通知有木马文件
  19. 51单片机学习——9--温度传感器DS18B20
  20. 昨夜西风凋碧树,独上高楼,望断天涯路————马哥培训第二天

热门文章

  1. linux升级火狐,Ubuntu Linux 10.04 中升级Firefox到Firefox 4.0
  2. react脚手架日常学习记录
  3. mysql的sql_quote_show_create与SHOW CREATE TABLE命令介绍
  4. Mixly arduino nrf2401+对讲机制作
  5. 家用计算机怎么关机,电脑要如何设置定时关机
  6. Failed to resolve 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+ 微信支付依赖异常
  7. Linux 僵死进程 文件操作
  8. net-snmp 子代理
  9. 【AI面试】目标检测中one-stage、two-stage算法的内容和优缺点对比汇总
  10. java功能实现:生成随机八位数编码,且用户编码唯一