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 ... 
随机推荐
- OSS上传文件到阿里云
			最近做项目,需要上传文件,因为上传到项目路径下,感觉有时候也挺不方便的,就试了一下上传文件到阿里云oss上去了, oss的使用网上有很多介绍,都是去配置一下需要的数据,然后直接调用他的api就可以了. ... 
- Java学习点滴——对象实例化
			基于<Java编程思想>第四版 构造与析构 在C++中通过构造函数和析构函数来保证:对象在使用前被正确初始化,在使用后被正确回收.Java中同样存在构造函数,但是没有析构函数.之所以没有析 ... 
- Vmware安装CentOs7+gitlab(一)
			本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:Ce ... 
- es6之三个点(...)扩展运算符
			我们看一个语法,你就知道es6对我们码农多友好,毕竟世界在进步 let arr=[1,2,3,4,54,56] console.log(...arr) 结果是????? 没错 ...这个运算符就是把这 ... 
- pyltp安装踩坑记录
			LTP(Language Technology Platform)由哈工大社会计算与信息检索研究中心开发,提供包括中文分词.词性标注.命名实体识别.依存句法分析.语义角色标注等丰富. 高效.精准的自然 ... 
- Netty 核心容器之ByteBuf 结构详解
			原文链接 Netty 核心容器之ByteBuf 结构详解 代码仓库地址 Java的NIO模块提供了ByteBuffer作为其字节存储容器,但是这个类的使用过于复杂,因此Netty实现了ByteBuf来 ... 
- MATLAB   音响系统工具箱
			音响系统工具箱 设计和测试音频处理系统 发行说明 pdf文档 音频系统工具箱™为音频处理系统的设计,仿真和桌面原型设计提供了算法和工具.它支持低延迟信号流式传输到音频接口,交互式参数调整以及数字音频工 ... 
- 智能ERP收银统计-优惠统计计算规则
			1.报表统计->收银统计->优惠统计规则 第三方平台优惠:(堂食订单:支付宝口碑券优惠)+(外卖订单:商家承担优惠) 自平台优惠:(堂食订单:商家后台优 ... 
- spring boot跨域问题
			跨域是指不同域名之间相互访问.跨域,指的是浏览器不能执行其他网站的脚本.它是浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制.也就是如果在A网站中,我们希望使用Ajax来获得B网站 ... 
- JAVA EE获取浏览器和操作系统信息
			一.原理说明: 1. 浏览器访问服务端时,Http请求头上会带上客户端一些信息,可通过"user-agent"获取. //java获取方法如下,其他语言也有自己获取方法 Stri ... 
 
			
		