传送门

题意:给出一个长度为n的环,一个常数k和q次询问,每次跳跃会从第i个点跳到第(i+k) mod n + 1 个点(每次都是从第一个点开始跳)。每一个点都有一个权值,记为ai。每次询问给出一个m,求m次跳跃的权值和对1e9+7取模。

分析:显然可以考虑循环节。考虑用倍增O(nlogm)预处理出从每个点开始跳2的幂次之后能获得的点权和,直接O(logm)查询

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long//空间紧会mle
// #define int __int128
#define pii pair<int,int>
#define endl '\n'//交互题需要endl刷新
const int mod=1e9+7;
const int maxn=1e5+5;
int a[maxn];
int go[maxn][65];
int sum[maxn][65];void solve()
{int n,k,q;cin>>n>>k>>q;for(int i=1;i<=n;i++){cin>>a[i];go[i][0]=(i+k)%n+1;sum[i][0]=a[i];}for(int j=1;j<=60;j++)//环 {for(int i=1;i<=n;i++){go[i][j]=go[go[i][j-1]][j-1];sum[i][j]=(sum[i][j-1]+sum[go[i][j-1]][j-1])%mod;}}for(int i=1;i<=q;i++){int m;cin>>m;int ans=0;int pos=1;for(int i=0;i<=60;i++){if((m>>i)&1){ans=(ans+sum[pos][i])%mod;pos=go[pos][i];}}if(i!=q) printf("%d ",ans);else printf("%d\n",ans);}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0);int t=1;// cin>>t;cin.ignore();//在getline之前使用while(t--) solve();
}

 倍增板子题

void solve()
{stack<int>s;int n,q;cin>>n>>q;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=n;i>=1;i--){while(!s.empty()&&a[s.top()]<=a[i]) s.pop();r[i]=s.empty()?n+1:s.top();if(r[i]==i+1){go[i][0]=i+1;sum[i][0]=0;}else{go[i][0]=r[i];sum[i][0]=1;}s.push(i);}for(int i=0;i<=20;i++) go[n+1][i]=n+1;for(int j=1;j<=20;j++){for(int i=1;i<=n;i++){go[i][j]=go[go[i][j-1]][j-1];sum[i][j]=sum[i][j-1]+sum[go[i][j-1]][j-1];}}while(q--){int l,r;cin>>l>>r;int ans=0;for(int i=20;i>=0;i--){if(go[l][i]<=r) ans+=sum[l][i],l=go[l][i];}if(l!=r) ans++;cout<<ans<<endl;}
}

zcmu-5141: 环倍晋三 / Fast Bubble Sort(倍增)相关推荐

  1. 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)

    冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...

  2. Recursive Bubble Sort(递归冒泡排序)

    程序来源:Recursive Bubble Sort 迭代冒泡排序算法: // Iterative Bubble Sort bubbleSort(arr[], n) {for (i = 0; i &l ...

  3. 冒泡排序的PHP实现 Bubble Sort

    冒泡排序Bubble Sort的PHP实现.代码中函数说明: out_arr,用于将数组输出成一个字符串,以便查看 bubblesort,第一种实现方案,从后往前依次选出需要的值,这里是较大的 bub ...

  4. 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)

    Bubble Sort 题意: 给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少 题解: 数字i多能到达的最左位置为min(s ...

  5. python冒泡排序_5种python方法实现冒泡排序可视化:Bubble Sort Visualizer

    1 说明: ===== 1.1 冒泡排序: 1.1.1 原理:比较两个相邻的元素,将值大的元素交换至右端. 1.1.2 来源:由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端, ...

  6. 经典排序算法 - 冒泡排序Bubble sort

    经典排序算法 - 冒泡排序Bubble sort 其原理是比较接近的数字22,按照从小到交换大或降序排列, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头開始进行两两比較交换,直到倒 ...

  7. 7.使用php描述冒泡排序,PHP 数据结构 算法描述 冒泡排序 bubble sort

    PHP 数据结构 算法描述 冒泡排序 bubble sort 复制代码 代码如下: /** * 冒泡排序 bubble sort * * 原理:多次循环进行比较,每次比较时将最大数移动到最上面.每次循 ...

  8. 算法—1,简单说说最常见的冒泡排序(Bubble Sort)

    一,引入. 冒泡排序可以说是学习算法知识的时候入门的一个算法了,可是自从我当了面试官之后,来面试的人却连冒泡写不出来,实在让我大跌眼镜,恰好最近一段时间想再深入学习一下算法,就单开一个分类,算法,来讲 ...

  9. C++Bubble sort冒泡排序的实现算法(附完整源码)

    C++Bubble sort冒泡排序的实现算法法 C++Bubble sort冒泡排序的实现算法完整源码(定义,实现,main函数测试) C++Bubble sort冒泡排序的实现算法完整源码(定义, ...

最新文章

  1. redis python zset
  2. 服务器异常代码413问题
  3. corosync+pacemaker+crmsh配置高可用集群。
  4. CentOS 7 下安装 mysql ,以及用到的命令
  5. 可申请试用!GN4系列GPU云服务器重磅来袭
  6. Android ListView 疯狂之旅 之 《自定义下拉刷新功能的ListView》
  7. selenium API(二)
  8. 【BZOJ3675】序列统计,斜率优化DP
  9. ES6新特性_使用babel对ES6模块化代码转换_使用browserify对代码进行打包_实现es6兼容其他浏览器--JavaScript_ECMAScript_ES6-ES11新特性工作笔记045
  10. Mahout学习笔记-分类算法之Decision Forest
  11. 电信猫不折旧,用了几年还是原价
  12. 自动化机器人 rpa_机器人过程自动化和机器人的出现
  13. 如何部署WAR到tomcat?
  14. echarts曲线图 鼠标位置偏移与提示框的大小设置(与竖线位置偏离)
  15. 南京信息工程大学计算机考研怎么样,南京信息工程大学就业怎么样,考研好不好?...
  16. Nginx+lua开发(OpenResty生态)
  17. 7-2 求奇数和 (5 分)
  18. 微电影剪辑就用会声会影
  19. 【C语言程序设计】实验 10
  20. 探索语言交互技术在政务数字化的应用

热门文章

  1. adcclk最大_ADC12采样保持时间与采样频率
  2. linux 安装绿色版的tomcat
  3. Java获取明天日期
  4. java天地劫_[修改]手机版回合制RPG游戏《殇界痕》吾爱版首发及PC修改方法
  5. python社会网络度与聚类系数的计算(network+原理法)
  6. 82所高校上榜!USNews 2022世界大学计算机科学排名公布
  7. luogu[U103720]薇尔莉特 题解
  8. 眼动数据分析基础_数据和指标的导出
  9. python之pdf转txt的两种方法——pdfminer与ocr
  10. 五步完美实现 Win10 + Ubuntu 17.04 双系统启动