博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3211 花神游历各国 【树状数组 + 并查集】
阅读量:4538 次
发布时间:2019-06-08

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

题目

这里写图片描述

输入格式

这里写图片描述

输出格式

每次x=1时,每行一个整数,表示这次旅行的开心度

输入样例

4

1 100 5 5

5

1 1 2

2 1 2

1 1 2

2 2 3

1 1 4

输出样例

101

11

11

数据

对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9

题解

类似于重复开根以及取模之类的操作都有个共性,就是重复取的次数非常少

以本题开根为例,当取到一定次数时,就会变为1
我们用树状数组维护区间和
用并查集维护当前位置往下【包括当前位置】,最近还可以开根的位置
每次暴力开根维护树状数组即可【最多开5*N次】

#include
#include
#include
#define LL long long int#define REP(i,n) for (int i = 1; i <= (n); i++)#define lbt(x) (x & -x)using namespace std;const int maxn = 100005,maxm = 100005,INF = 1000000000;inline int RD(){ int out = 0,flag = 1; char c = getchar(); while (c < 48 || c > 57) {
if (c == '-') flag = -1; c = getchar();} while (c >= 48 && c <= 57) {
out = (out << 1) + (out << 3) + c - '0'; c = getchar();} return out * flag;}int N,M,pre[maxn],num[maxn];LL A[maxn];void add(int u,LL v){
while (u <= N) A[u] += v,u += lbt(u);}LL query(int u){LL ans = 0; while(u) ans += A[u],u -= lbt(u); return ans;}LL sum(int l,int r){
return query(r) - query(l - 1);}int find(int u){
return u == pre[u] ? u : pre[u] = find(pre[u]);}int main(){ N = RD(); REP(i,N){ num[i] = RD(); add(i,num[i]); pre[i] = (num[i] != 0 && num[i] != 1) ? i : i + 1; }pre[N + 1] = N + 1; M = RD(); int cmd,l,r,u,v; while (M--){ cmd = RD(); l = RD(); r = RD(); if (cmd & 1) printf("%lld\n",sum(l,r)); else { u = find(l); while (u <= r){ v = (LL)sqrt(num[u]); add(u,v - num[u]); num[u] = v; if (num[u] == 1 || num[u] == 0) pre[u] = u + 1; u++; } } } return 0;}

转载于:https://www.cnblogs.com/Mychael/p/8282748.html

你可能感兴趣的文章
线段树
查看>>
a span等行内元素加margin属性后无效果解决方案
查看>>
傻瓜式硬盘重装win7系统图文加视频教程
查看>>
BZOJ 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头:统计 + 筛法【调和级数】
查看>>
如果一个人请优雅的活着。
查看>>
验证码
查看>>
Django缓存配置
查看>>
Ubuntu下安装 Mysql
查看>>
LeetCode--Reverse Integer
查看>>
PHP_APC+Ajax实现的监视进度条的文件上传
查看>>
计算机网络课堂笔记3.29
查看>>
word2vec----CBOW
查看>>
衰减学习率真的有用吗?
查看>>
ORACLE 建库过程总结
查看>>
Ogre1.8.1 Basic Tutorial 6 - The Ogre Startup Sequence
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用...
查看>>
c# Winform 开发分屏显示应用程序
查看>>
canvas刮奖
查看>>
添加源ubuntu_x64 安装 Adobe Reader
查看>>
给datalist加自动编号(解决博客的第XX楼)
查看>>