传送门

题目大意

$1,2...n,n$个数从小到大排列,有$m$此操作,每次操作给定一个参数$x$,将当且数列作为循环节无限地展开下去,再取前$x$个作为新的数列,求最终的数列每个数出现的次数。

$n,m\leq 10^5,x\leq 10^{18}$

题解

人类智慧题

首先对于两个$x$不递增的连续操作,上一次操作是没有意义的,对于第一次操作$x<n$,要特判出来。

记当前数列长度为$len$,新家入的操作是$x$,先算出$x$中有多少个$len$,就知道最终答案会由多少个$len$代表的数列构成。由于每一步操作留下的数列一定会作为循环节的前缀出现在新数列中,我们将$x\mod len$的值计算出来,再递归找到最后一个操作使得该操作结束后$len<x$,递归处理即可,直到$x\leq n$,这样就将$1-x$的数依次加入最终答案即可。

考虑从最后一个操作向前递推,不断求出形如$1-x$独立出现了多少次,最终统计答案即可。

由于对于每一步操作,每一次查找$len$出现的位置需要二分,每次$x$由于取模的缘故会至少变为原来的一半,所以是查找不会超过$\log x$次,复杂度为$O(m\log m\log x+n)$。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define M 100020
using namespace std;
const int BS=1<<19;char BF[BS],OT[BS],*SZ=OT,*HD,*TL;
const char *ED=OT+BS-1; char SS[20]; int Top;
char Getchar(){if(HD==TL) TL=(HD=BF)+fread(BF,1,BS,stdin);return *HD++;}
void flush(){fwrite(OT,1,SZ-OT,stdout);}
void Putchar(char c){*SZ++ =c;if(SZ==ED) flush(),SZ=OT;}
void write(LL x){
if(!x){Putchar(x),Putchar('\n');}
while(x) SS[++Top]=(x%10+'0'),x/=10;
while(Top) Putchar(SS[Top]),Top--; Putchar('\n');
}
LL read(){
LL nm=0,fh=1; char cw=Getchar();
for(;!isdigit(cw);cw=Getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=Getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
LL n,T,m,p[M],N,G[M],F[M],K[M],tmp;
int main(){
n=read(),T=read();
while(T--){LL x=read(); while(m&&p[m]>=x) m--; p[++m]=x;}
if(m&&p[1]<n){N=n,n=p[1];for(LL i=1;i<m;i++) p[i]=p[i+1];m--;}
G[0]=p[0]=n,F[m]=1;
for(LL i=m;i>=0;i--){
LL res=p[i],now=i-1;
while(res>n){
LL k=res/p[now]; F[now]+=F[i]*k,res-=k*p[now];
now=upper_bound(p,p+now,res)-p-1;
} G[i]=res,K[1]+=F[i],K[G[i]+1]-=F[i];
}
for(LL i=1;i<=n;i++) K[i]+=K[i-1],write(K[i]);
while(n<N) n++,Putchar('0'),Putchar('\n'); flush(); return 0;
}

Agc003_E Sequential operations on Sequence的更多相关文章

  1. AtCoder Grand Contest 003 E - Sequential operations on Sequence

    题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_e 题目大意 一串数,初始为\(1\sim N\),现有\(Q\)个操作,每次操作会把数组长度 ...

  2. 【做题】agc003E - Sequential operations on Sequence——经典结论

    题意:有一个序列,初始是从\(1\)到\(n\)的\(n\)个数.有\(q\)次操作,每次操作给出\(q_i\),把当前的序列重复无数遍,然后截取最前面的\(q_i\)个元素作为新序列.要求输出完成所 ...

  3. 【agc003E】Sequential operations on Sequence

    Portal -->agc003E Description 给你一个数串\(S\),一开始的时候\(S=\{1,2,3,...,n\}\),现在要对其进行\(m\)次操作,每次操作给定一个\(a ...

  4. 【AGC003 E】Sequential operations on Sequence

    Description 你有一个长度为 \(n\) 的序列,第 \(i\) 项为 \(i\). 有 \(m\) 次操作,每次操作给定一个 \(x\),你需要将序列无限循环后截取前 \(x\) 项,作为 ...

  5. agc003E Sequential operations on Sequence

    题意: 有一个数字串S,初始长度为n,是1 2 3 4 …… n. 有m次操作,每次操作给你一个正整数a[i],你先把S无穷重复,然后把前a[i]截取出来成为新的S. 求m次操作后,每个数字在S中出现 ...

  6. 【题解】Atcoder AGC#03 E-Sequential operations on Sequence

    仙题膜拜系列...首先我们可以发现:如果在截取了一段大的区间之后再截取一段小的区间,显然是没有什么用的.所以我们可以将操作序列变成单调递增的序列. 然后怎么考虑呢?启示:不一定要考虑每一个数字出现的次 ...

  7. AtCoder Grand Contest 003

    AtCoder Grand Contest 003 A - Wanna go back home 翻译 告诉你一个人每天向哪个方向走,你可以自定义他每天走的距离,问它能否在最后一天结束之后回到起点. ...

  8. RE:从零开始的AGC被虐(到)生活(不能自理)

    RE:从零开始的AGC被虐(到)生活(不能自理) 「一直注视着你,似近似远,总是触碰不到.」 --来自风平浪静的明天 AtCoder Grand Contest 001 B: Mysterious L ...

  9. AtCoder Grand Contest

    一句话题解 QwQ主要是因为这篇文章写的有点长……有时候要找某一个题可能不是很好找,所以写了这个东西. 具体的题意.题解和代码可以再往下翻._(:з」∠)_ AGC 001 C:枚举中点/中边. D: ...

随机推荐

  1. iOS中获取系统相册中的图片

    一.获取单张图片 思路: 1.利用UIImagePickerController可以从系统自带的App(照片\相机)中获得图片 2.设置代理,遵守代理协议 注意这个UIImagePickerContr ...

  2. drupal7 使用(hook_preprocess_HOOK)向各个主题模版里面传递变量

    函数地址:hook_preprocess_HOOK 1 首先解释下hook_preprocess_HOOK这个钩子的含义: hook           _     preprocess  _   H ...

  3. sql server 2008 去除html标签

    由于商品详情数据库的字段是text,存放的是html,但是要求导出的商品详情中只是商品的描述,不要标签,原来打算先把数据导入excel中,然后利用java的正则去替换,结果由于商品详情太大,一个单元格 ...

  4. maven-tomcat7;IOC;AOP;数据库远程连接

    [说明]真的是好烦下载插件啊,maven-tomcat7 插件试了好多次都不行,下载不成:部署不成:好不容易从github中得到的springmvc项目也是运行不起来,中间又是查了许多东西,绕着绕着都 ...

  5. vue组件父子组件之间传递数据

    举个栗子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  6. 九度OJ 1341:艾薇儿的演唱会 (最短路)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:528 解决:241 题目描述: 艾薇儿今天来到了中国,她计划两天后在哈尔滨举行一场个人的演唱会.由于出现了紧急情况,演唱会的举办方要求艾薇儿 ...

  7. 1.Python学习---helloworld

    1.首先访问http://www.python.org/download/去下载最新的python版本. 2.安装下载包,一路next. 3.为计算机添加安装目录搭到环境变量,如图把python的安装 ...

  8. php字符串操作: 去掉UTF-16的空格

    $s = json_encode($s); $s = str_replace('\u00a0','',$s); $s = str_replace('\u3000','',$s); $s = str_r ...

  9. Bootstrap第3天

    Bootstrap第3天 图片样式 .img-responsive:直接为图片添加该样式,可以实现响应式图片. .center-block:图片居中样式,而不能使用text-center样式. 图片形 ...

  10. ABAP动态生成经典应用之Dynamic SQL Excute 程序

    [转自http://blog.csdn.net/mysingle/article/details/678598]开发说明:在SAP的系统维护过程中,有时我们需要修改一些Table中的数据,可是很多Ta ...