【BZOJ4236】JOIOJI STL
【BZOJ4236】JOIOJI
Description
Input
Output
Sample Input
JOIIJOJOOI
Sample Output
HINT
题解:本题要求三个字符的数量都相同,我们仍然采用前缀相减的方式,设sj,so,si表示J,O,I的前缀出现次数,那么条件就是:
sj[i]-sj[j]=so[i]-so[j]=si[i]-si[j]
移项,得
sj[i]-so[i]=sj[j]-so[j],sj[i]-si[i]=si[i]-si[j]
这样就转变成让i和j的两个权值都相等的问题,用map存一下就好了
然而我一开始忘了map怎么用,手写treap水过~
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
const int maxn=200010;
int rt[maxn<<1],ch[maxn][2],v[maxn],k[maxn],w[maxn];
int n,tot,s1,s2,s3,ans;
char str[maxn];
void rotate(int &x,int d)
{
int y=ch[x][d];
ch[x][d]=ch[y][d^1];
ch[y][d^1]=x;
x=y;
}
void insert(int &x,int y,int z)
{
if(!x)
{
x=++tot;
v[x]=y,w[x]=z,k[x]=rand();
return ;
}
int d=y<v[x]?0:1;
insert(ch[x][d],y,z);
if(k[ch[x][d]]>k[x]) rotate(x,d);
}
int find(int x,int y)
{
if(!x) return 0;
if(y==v[x]) return x;
if(y<v[x]) return find(ch[x][0],y);
return find(ch[x][1],y);
}
int main()
{
srand(2333333);
scanf("%d",&n);
scanf("%s",str);
int i;
insert(rt[n],0,0);
for(i=1;i<=n;i++)
{
if(str[i-1]=='J') s1++;
if(str[i-1]=='O') s2++;
if(str[i-1]=='I') s3++;
int t=find(rt[s1-s2+n],s2-s3);
if(!t) insert(rt[s1-s2+n],s2-s3,i);
else ans=max(ans,i-w[t]);
}
printf("%d",ans);
return 0;
}
【BZOJ4236】JOIOJI STL的更多相关文章
- 【BZOJ4236】JOIOJI [DP]
JOIOJI Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description JOIOJI桑是JOI君的叔叔 ...
- 【bzoj4236】JOIOJI STL-map
题目描述 JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的名字和自己一样由“J.O.I” ...
- 【Example】C++ STL 常用容器概述
前排提醒: 由于 Microsoft Docs 全是机翻.所以本文表格是我人脑补翻+审校. 如果有纰漏.模糊及时评论反馈. 序列式容器 序列容器是指在逻辑上以线性排列方式存储给定类型元素的容器. 这些 ...
- 【转】C++ STL 相关的问题集合
3.C++ STL中vector的相关问题: (1).调用push_back时,其内部的内存分配是如何进行的? (2).调用clear时,内部是如何具体实现的?若想将其内存释放,该如何操作 ...
- 【转】C++ STL快速入门
转自:https://www.cnblogs.com/skyfsm/p/6934246.html 冠军的试炼 悟已往之不谏,知来者之可追 博客园 首页 新随笔 联系 订阅 管理 随笔 - 60 文章 ...
- 【C++】:STL迭代器使用---[容器::iterator iter;]
参考文章:http://blog.csdn.net/qq_23100787/article/details/51388163 迭代器这种东西,就是为了使访问简单!! 容器::iterator iter ...
- 【经验】实现STL算法时遇到的模板编译错误问题
在实现set_union算法时调用了自己写的copy算法,出现了以下问题. Error 1 error C2665: 'xyz_stl::__copy' : none of the 2 overloa ...
- 【C++】朝花夕拾——STL vector
STL之vector篇 N久之前是拿C的数组实现过vector中的一些简单功能,什么深拷贝.增删查找之类的,以为vector的实现也就是这样了,现在想想真是...too young too naive ...
- 【转载】C++ STL priority_queue用法
priority_queue 对于基本类型的使用方法相对简单.他的模板声明带有三个参数,priority_queue<Type, Container, Functional> Type 为 ...
随机推荐
- Select显示多级分类列表
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- LINQ教程二:LINQ操作语法
LINQ查询时有两种语法可供选择:查询表达式语法(Query Expression)和方法语法(Fluent Syntax). 一.查询表达式语法 查询表达式语法是一种更接近SQL语法的查询方式. L ...
- Entity Framework应用:管理并发
理解并发 并发管理解决的是允许多个实体同时更新,实际上这意味着允许多个用户同时在相同的数据上执行多个数据库操作.并发是在一个数据库上管理多个操作的一种方式,同时遵守了数据库操作的ACID属性(原子性. ...
- easyUI datagrid 排序
easyUI datagrid 排序 1.首先设置datagrid属性sortName 2.设置sortOrder 3.设置remoteSort(注:此属性默认为true,如果如果是对本地数据排序必须 ...
- 封装自己的yQuery
function myAddEvent(obj, sEv, fn) { if (obj.attachEvent) { obj.attachEvent('on' + sEv, fn) } else { ...
- smo算法matlab实现
看完CSDN上结构之法,算法之道的支持向量机通俗导论(理解SVM的三层境界) http://blog.csdn.net/v_july_v/article/details/7624837 参考了 ...
- Step download timeout (120 sec)
Step download timeout (120 sec) --------- Troubleshooting----------------------------------- 修改S ...
- 终于想明白一些事,关于NAS
一直以来想搞好一部NAS存储小孩的视频和照片,一直纠结用什么硬件,硬件解决后虽然不甚满意,不过无论怎么样都算投入巨资(超过7千……)组装完毕,然后就一直纠结用什么NAS系统,终于下定决心使用了OMV, ...
- 关于Unity中UI中的Mask组件、Text组件和布局
一.Mask组件 遮罩,Rect Mask矩形Mask(Rect Mask2D组件),图片Mask(Mask组件)(图片Mask的透明度不为0的部分显示子图片,为0的部分不显示子图片) Rect Ma ...
- 扫盲:java中关于路径的问题
../FileName:当前工程的上级目录. ./FileName:当前工程所在的目录. /FileName:当前工程所在磁盘的根目录(windows下). FileName:当前工程所在的目录.