1422 沙拉酱前缀
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

 收藏
 关注

沙拉酱非常喜欢数字序列。这正是他要弄一个关于构造序列的算法的原因。

沙拉酱拿了一张白纸。然后他开始用m个步骤来制作一个序列。每一步他要么向这个序列的末尾添加一个数字,要么拿这个序列的开头l个数字,然后在末尾添加c次。对于第二种操作,一般的,如果当前序列是 a1,a2,...,an ,那么经过操作之后序列将变成 a1,a2,...,an[,a1,a2,...,al]  (方括号里面的内容会重复c次)。

一天过去了,沙拉酱也完成了他的序列。现在他想知道某个位置是什么数字。

Input
单组测试数据。
第一行包含一个整数m (1 ≤ m ≤ 10^5),表示构造序列的步骤数目。
接下来m行包含每一个步骤的信息。第一个数字是类型(1或2)。类型1表示在序列后面加一个数字,这种情况下后面会跟一个整数xi (1 ≤ xi ≤ 10^5),表示被加在后面的数字。类型2表示复制一段长度为 li 前缀然后接到后面 ci 次,这种情况下后面会跟两个整数 li, ci(1 ≤ li ≤ 10^5, 1 ≤ ci ≤ 10^4),li 是前缀的长度,ci是复制的次数。输入中保证li不会大于当前序列的长度。接下来一行包含一个整数n (1 ≤ n ≤ 10^5),表示查询的数量。接下来一行中包含n个正整数,每一个整数表示要查询的位置。题目保证这些数字大小不会超过序列的长度。序列的下标从1开始。
Output
对于每一个查询,输出对应查询位置的数字。两个查询之间用空格分开。具体格式看样例。
Input示例
6
1 1
1 2
2 2 1
1 3
2 5 2
1 4
16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Output示例
1 2 1 2 3 1 2 1 2 3 1 2 1 2 3 4
System Message (题目提供者)

一道有点奇奇怪怪的题目?

刚开始以为是数据结构

看了题解才知道一个二分递归就可以了

真 以后看到1e5就要想到二分.jpg

二分一下要寻找的位置在哪个操作里

算出该位置的值的位置

然后递归下去

AC之后我闲来无事又加了一个小范围(1e7)的记忆化(然而并没有什么明显的效果)

#include<cstring>
const int N=1e5+10;
struct node
{long long l,r;bool tag;int num;
}e[N];
int n,m;
int find(long long  x)
{int ll=1,rr=m;int ans=0;while(rr-ll>1){int mid=(ll+rr)>>1;if(x<e[mid].l)  rr=mid-1;else if(x>e[mid].r)    ll=mid+1;else {ans=mid;break;}}if(!ans){if(e[ll].l<=x&&x<=e[ll].r)   ans=ll;else ans=rr;}
//  printf("std::%d\n",ans);if(!e[ans].tag)   return e[ans].num;long long  cha=x-e[ans].l+1;cha=cha%e[ans].num;if(!cha)    cha=e[ans].num;
//  printf("std::%lld\n",cha);return find(cha);
}
int main()
{int p,q;int opt;scanf("%d",&m);for(int i=1;i<=m;++i){scanf("%d %d",&opt,&p);if(opt==1)    e[i].l=e[i].r=e[i-1].r+1,e[i].tag=0,e[i].num=p;else scanf("%d",&q),e[i].l=e[i-1].r+1,e[i].r=e[i].l+p*q-1,e[i].tag=1,e[i].num=p;
//      printf("std::%lld %lld\n",e[i].l,e[i].r);}scanf("%d",&n);long long x;for(int i=1;i<=n;i++){scanf("%lld",&x);printf("%d ",find(x));}return 0;
}

51nod 1422 沙拉酱前缀相关推荐

  1. 51nod-1422:沙拉酱前缀

    1422 沙拉酱前缀 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 沙拉酱非常喜欢数字序列.这正是他要弄一个关于 ...

  2. 51nod 1277 KMP 前缀出现次数

    51NOD 1277:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1277 跟HDU 6153还挺像的:http://w ...

  3. 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找

    题目: 这题要求大于0的最小字段和,常规O(n)求最大字段和的方法肯定是没法解的. 我的解法是:用sum[i]存前i项的和,也就是前缀和. 这题就变成了求sum[j]-sum[i]的大于0的最小值( ...

  4. 51nod 1098 最小方差 排序+前缀和+期望方差公式

    题目: 题目要我们,在m个数中,选取n个数,求出这n个数的方差,求方差的最小值. 1.我们知道,方差是描述稳定程度的,所以肯定是着n个数越密集,方差越小. 所以我们给这m个数排个序,从连续的n个数中找 ...

  5. 51nod 1103 N的倍数 思路:抽屉原理+前缀和

    题目: 这是一道很神奇的题目,做法非常巧妙.巧妙在题目要求n个数字,而且正好要求和为n的倍数. 思路:用sum[i]表示前i个数字的和%n.得到sum[ 1-N ]共N个数字. N个数字对N取模,每个 ...

  6. 51nod 1393 0和1相等串 思路 : map存前缀和

    题目: 思路:把'0'当成数字-1,'1'当成数字1,求前缀和,用map更新当前前缀和最早出现的位置.(用map而不用数组是因为可能会出现负数) 当前缀和的值之前出现过,比如i = 10时,sum = ...

  7. 51nod 1344 走格子【贪心/前缀和】

    1344 走格子 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格 ...

  8. 【51nod - 1098】 最小方差(基础数学,公式化简,前缀和,积的前缀和)

    题干: 若x1,x2,x3--xn的平均数为k. 则方差s^2 = 1/n * [(x1-k)^2+(x2-k)^2+--.+(xn-k)^2] . 方差即偏离平方的均值,称为标准差或均方差,方差描述 ...

  9. 【51nod - 前缀异或】 对前缀和的理解

    题干: 前缀异或  基准时间限制:2 秒 空间限制:131072 KB 分值: 5 输入一个长度为n(1 <= n <= 100000)数组a[1], a[2], ..., a[n]. 输 ...

最新文章

  1. log4j(七)——log4j.xml简单配置样例说明
  2. 数据分析系列精彩浓缩(二)
  3. python中文件分类_Python中的类是否在不同的文件中?
  4. [原]FreeSWITCH uuid_transfer both转移失败(三方通话),如何解决?
  5. 如何使用Dirsearch探测Web目录
  6. Mysql DBA 高级运维学习之路-DML语句之insert知识讲解
  7. rocketmq源码调试
  8. java 常量池技术
  9. matlab电气教程下载,Matlab 2020b介绍及下载安装步骤
  10. 架构之美-读书笔记之一
  11. Linux服务器下载Redis
  12. Linux 的du和df命令
  13. Asp 解析 XML并分页显示
  14. 传统安防监控直播的四分屏的前端展示代码
  15. 云上生活——数字经济万物互联
  16. 用计算机软件绘制思维导图和手绘思维导图,用计算机软件绘制思维导图和手绘思维导图各有优势。()...
  17. The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on .
  18. 【大疆智图】| 重建三维模型
  19. 大学里机器人比赛的那些事
  20. 好嗨游戏:20款史上最佳的MMORPG游戏,看看有没有你知道的?

热门文章

  1. NFPA 855-2020+勘误+增补【中文】 固定式储能系统的安装标准
  2. ShaderLearning_3_UnityShader基本架构
  3. 互联网摸鱼日报(2022-12-22)
  4. 国内技术网站逛腻了?国外程序员常浏览的 8 大网站,了解一下
  5. Kong系列-05-使用入门
  6. 百度地图 驾车导航用来生成路线 轨迹回放(LuShu)
  7. 【无标题】光纤收发器TX、RX分别表示什么?区分单纤双纤收发器的方法
  8. 按回车键光标自动移动到下一个输入框。
  9. java 使用GeoTools工具 geojson 与shp 相互转换
  10. 1 Robotics: Aerial Robotics 第3+4周 课程学习记录及课后习题解答