博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces 13E 分块
阅读量:5842 次
发布时间:2019-06-18

本文共 2150 字,大约阅读时间需要 7 分钟。

 

题目链接:http://codeforces.com/problemset/problem/13/E

题意:给定n个弹簧和每个弹簧初始的弹力a[]。当球落在第i个位置。则球会被弹到i+a[i]的位置.

现在有2种操作:

1 a b:把第a个弹簧的弹力修改为b。

2 a:当球初始放入的位置为a时,需要弹几次才会弹出n。弹出前的最后一个位置是多少。 输出位置和次数。

思路:和一样。 然后记录一个最后弹出去的位置preidx。每次弹出当前块的时候记录当前的位置即可。然后最后再暴力模拟最后弹出去时所在的块的位置即可。

#define _CRT_SECURE_NO_DEPRECATE#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long int LL;const int MAXN = 100000 + 10;int belong[MAXN], block, num, L[MAXN], R[MAXN];int n, q;int a[MAXN], cnt[MAXN], to[MAXN];void build(){ block = (int)sqrt(n + 0.5); num = n / block; if (n%block){ num++; } for (int i = 1; i <= num; i++){ L[i] = (i - 1)*block + 1; R[i] = i*block; } R[num] = n; for (int i = 1; i <= n; i++){ belong[i] = ((i - 1) / block) + 1; } for (int i = num; i>=1; i--){ for (int j = R[i]; j >= L[i]; j--){ if (j + a[j]>R[i]){ cnt[j] = 1; to[j] = min(n + 1, j + a[j]); } else{ cnt[j] = cnt[j + a[j]] + 1; to[j] = min(n + 1, to[j + a[j]]); } } }}void modify(int pos, int val){ a[pos] = val; for (int i = pos; i >= L[belong[pos]]; i--){ if (i + a[i]>R[belong[pos]]){ cnt[i] = 1; to[i] = min(i + a[i], n + 1); } else{ cnt[i] = cnt[i + a[i]] + 1; to[i] = min(to[i + a[i]], n + 1); } }}void query(int pos, int &ans, int &preidx){ ans = 0; for (int i = pos; i <= n; i = to[i]){ ans += cnt[i]; preidx = i; //记录最后弹出去前的位置 } for (int i = preidx; i <= n; i = i + a[i]){ //暴力模拟最后在哪个位置弹出去了 preidx = i; }}int main(){//#ifdef kirito// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);//#endif// int start = clock(); while (~scanf("%d%d", &n, &q)){ for (int i = 1; i <= n; i++){ scanf("%d", &a[i]); } build(); int type, pos, v, ans, idx; for (int i = 1; i <= q; i++){ scanf("%d", &type); if (type == 0){ scanf("%d%d", &pos, &v); modify(pos, v); } else{ scanf("%d", &pos); query(pos, ans, idx); printf("%d %d\n", idx, ans); } } }//#ifdef LOCAL_TIME// cout << "[Finished in " << clock() - start << " ms]" << endl;//#endif return 0;}

 

转载于:https://www.cnblogs.com/kirito520/p/5946568.html

你可能感兴趣的文章
请求与响应
查看>>
sql server(常用)
查看>>
算法 - 最好、最坏、平均复杂度
查看>>
git分支进阶
查看>>
VS历程简单记录
查看>>
MySQL 不落地迁移、导入 PostgreSQL - 推荐 rds_dbsync
查看>>
二叉树的蛇形遍历 leetcode 103
查看>>
Linux设备驱动之IIO子系统——IIO框架及IIO数据结构
查看>>
【Util】 时间天数增加,时间比较。
查看>>
[Erlang 0004] Centos 源代码编译 安装 Erlang
查看>>
51 Nod 1027 大数乘法【Java大数乱搞】
查看>>
20.4. myisamchk — MyISAM Table-Maintenance Utility
查看>>
三维重建技术概述
查看>>
Go语言与数据库开发:01-09
查看>>
Python连续攀升,其他的脚本语言去哪了?
查看>>
socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少
查看>>
中文分词之HMM模型详解
查看>>
山东青岛市南区:创建"物联网" 信息化管理涉案财物
查看>>
《爆发》作者:大数据领域将有新赢家
查看>>
AI x 量化:华尔街老司机解密智能投资正确姿势
查看>>