Codeforces Round #549 (Div. 2) 训练实录 (5/6)
The Doors +0
找出输入的01数列里,0或者1先出完的的下标。
Nirvana +3
输入n,求1到n的数字,哪个数逐位相乘的积最大,输出最大积。
思路是按位比较,从低到高,依次把小位换成全9,判断一下。细节上容易出错,比如边界和减一的情况。要多加小心。
Queen +0
给一棵树,删除树中一些点,这些点的\(C_i\)权值是1,且直接的孩子也也是1。从小到大依次输出删除的编号。
中间我以为是所有子孙的权值都要是1,幸好发现了。
The Beatles /+0
给一个\(n \cdot k\) 的环,其中每\(k\)个点就是一个关键点,现在主人公要从某点出发,每次走\(l\)个距离,最后回到出发点。给出起点距离最近关键点的距离\(a\),以及第二个到达的位置最近关键点的距离b。最少和最多需要多少次结束活动。

Lynyrd Skynyrd /+0
看过了题解,需要一点倍增(binary lifting)的技巧,大多数时间都用来学倍增了。题意是给长度\(n\)的数组\(p\),长度\(m\)的数组\(a\),对\(a\)进行\(q\)次区间询问,每次判断区间内,是否存在子序列恰好等于\(p\)的某个cyclic shifts。
cyclic shifts表示把p往左移动若干位,溢出的数依次插到右边。
看上去还挺蒙的,解法要一步步来,首先找到\(a[i]\)的最近的上一个数字\(a[j]\)在什么位置,使得\(a[j]\)和\(a[i]\)恰好是某对\(p[k-1]\)和\(p[k]\),我们把位置记作\(pre[i]\)。那么我们可以对每个位置\(i\),往左找\(a[i]\)作为结尾的匹配子序列的起点位置,如果能找到的话,我们可以对每个位置再记一个距离\(i\)最近的起点,每次询问就可以\(O(1)\)解决。但是这个找起点的过程暴力做的话是显然\(n*m\)的,时间不允许,因为是连续找前驱的操作,可以用倍增来优化。
//https://codeforces.com/contest/1143/problem/E
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 2e5+7;
const int INF = 0x3f3f3f3f;
int f[MAXN][(int)log(MAXN)+7];
int pre[MAXN];
int p[MAXN],a[MAXN];
int posa[MAXN],posp[MAXN];
int ans[MAXN];
int n,m,q,k;
int findpre(int u){
int t=n-1;
while(t&&u){
for(int i=k;i>=0;i--){
if((1<<i)<=t){
u=f[u][i];
t-=(1<<i);
break;
}
}
}
return u;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
//cout<<log10(100)<<endl;
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>p[i];
posp[p[i]]=i;
}
for(int i=1;i<=m;i++){
cin>>a[i];
posa[a[i]]=i;
}
for(int pj,i=1;i<=m;i++){
pj=(posp[a[i]]-1+n-1)%n+1;
pre[i]=posa[p[pj]];
posa[a[i]]=i;
}
for(int u=1;u<=m;u++){
f[u][0]=pre[u]<u?pre[u]:0;
}
k=log(n)+1;
for(int i=1;i<=k;i++){
for(int u=1;u<=m;u++){
f[u][i]=f[f[u][i-1]][i-1];
}
}
for(int t,u=n;u<=m;u++){
t=findpre(u);
ans[u]=max(t,ans[u-1]);
}
for(int l,r,i=1;i<=q;i++){
cin>>l>>r;
if(ans[r]>=l)cout<<"1";
else cout<<"0";
}
cout<<endl;
return 0;
}
TBCD...还差一道,咕咕咕
U2
Codeforces Round #549 (Div. 2) 训练实录 (5/6)的更多相关文章
- [题解] Codeforces Round #549 (Div. 2) B. Nirvana
Codeforces Round #549 (Div. 2) B. Nirvana [题目描述] B. Nirvana time limit per test1 second memory limit ...
- Codeforces Round #549 (Div. 1)
今天试图用typora写题解 真开心 参考 你会发现有很多都是参考的..zblzbl Codeforces Round #549 (Div. 1) 最近脑子不行啦 需要cf来缓解一下 A. The B ...
- [ Codeforces Round #549 (Div. 2)][D. The Beatles][exgcd]
https://codeforces.com/contest/1143/problem/D D. The Beatles time limit per test 1 second memory lim ...
- Codeforces Round #302 (Div. 1) 训练
链接: http://codeforces.com/contest/543 过程: 惨淡的只做出了A和C 题解: A 题解: 简单的一道题 我们用$dp[i][j]$表示当前考虑到前num个人(这个另 ...
- Codeforces Round #549 (Div. 2) F 数形结合 + 凸包(新坑)
https://codeforces.com/contest/1143/problem/F 题意 有n条形如\(y=x^2+bx+c\)的抛物线,问有多少条抛物线上方没有其他抛物线的交点 题解 \(y ...
- Codeforces Round #549 (Div. 2) E 倍增处理按排列顺序的上一个位置
https://codeforces.com/contest/1143/problem/E 题意 p为n的一个排列,给出有m个数字的数组a,q次询问,每次询问a数组区间[l,r]中是否存在子序列为p的 ...
- Codeforces Round #549 (Div. 2) D 数学
https://codeforces.com/contest/1143/problem/D 题意 有nk个城市,第1,k+1,2k+1,...,(n-1)k+1城市有餐厅,你每次能走l距离,a为起始位 ...
- CodeForces Round #549 Div.2
A. The Doors 代码: #include <bits/stdc++.h> using namespace std; ; int N; , One = ; int a[maxn], ...
- B. Nirvana Codeforces Round #549 (Div. 2) (递归dfs)
---恢复内容开始--- Kurt reaches nirvana when he finds the product of all the digits of some positive integ ...
随机推荐
- Mybatis-plus快速入门
简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 特性 无侵入:只做增强不做改变,引入它不会对现 ...
- 由于服务主机:DCOM服务进程占用过多CPU,导致系统卡死
最近在使用电脑的时候,总是出现电脑死机,而且鼠标也是经常卡在那里不动了,开始以为是鼠标的问题,还换了个鼠标(飙泪中),这还是一个血的教训啊!!!之后打开任务管理器发现CPU占用已经达到100%,而且一 ...
- cesium 之地图显示坐标、比例尺、海拔高度效果篇(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- zabbix利用SNMPTrap接收交换机主动告警
zabbix接收trap的工作流程: snmptrapd 收到trap snmptrapd将trap传递给SNMPTT或调用Perl接收器 SNMPTT或Perl trap接收器解析,格式化并将tra ...
- Jdk 接口类RandomAccess了解
1. 接口说明 Marker interface used by List implementations to indicate that they support fast (generally ...
- java有关 String char 常见问题 编辑中
1 输入输出有关 Scanner 的next()方法 返回值是String 所以尝试获得char时 应该用input.next().charAt[0] 2 空值 String 中null是指 对象引用 ...
- serialize()与serializeArray()
1.了解serialize()与serializeArray() serialize()序列化表单元素,用于ajax请求, serializeArray()序列化表单元素,类似于serialize,但 ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
- 如何配置jenkins 与代理服务器吗?
0 我们面临一些问题使用代理服务器(即缓存服务器)和詹金斯是希望有人可以提供如果他们有类似的设置. Herea年代简要描述的设置: 在主站点反向代理,JTS & CCM服 ...
- vue兄弟之间传值 bus中央事件总线
创建一个eventVue.js文件 import Vue from 'vue' export default new Vue 父 <template> <div> <di ...
