[BZOJ3211]花神游历各国&&[BZOJ3038] 上帝造题的七分钟2 树状数组+并查集
2024-09-02 06:16:00
3211: 花神游历各国
Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 4057 Solved: 1480
[Submit][Status][Discuss]
Description
Input
Output
每次x=1时,每行一个整数,表示这次旅行的开心度
Sample Input
4
1 100 5 5
5
1 1 2
2 1 2
1 1 2
2 2 3
1 1 4
Sample Output
101
11
11
HINT
对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9
Source
由于是开方,所以每个数的开放次数不超过logn次,用树状数组维护前缀和,对于修改操作变为单点修改。
用并查集维护当前节点之前的最近的一个非1节点。
复杂度o(nlog2n)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
int read() {
int x=;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
return x;
}
int n,m;
long long sum[];
long long a[];
int fa[];
int find(int x){return fa[x]==x?fa[x]:fa[x]=find(fa[x]);}
int lowbit(int x){return x&(-x);}
void add(int x,long long val) {
for(int i=x;i<=n;i+=lowbit(i)) sum[i]+=val;
}
void change(int x,long long val) {
for(int i=x;i<=n;i+=lowbit(i)) sum[i]=sum[i]-val+(long long)sqrt(val);
}
long long query(int x) {
long long ans=;
for(int i=x;i>;i-=lowbit(i)) ans+=sum[i];
return ans;
}
int main() {
n=read();
for(int i=;i<=n;i++) {a[i]=read();add(i,a[i]);}
for(int i=;i<=n;i++) fa[i]=i;
m=read();
while(m--) {
int x=read(),l=read(),r=read();
if(x==) {
int now=find(r);
while(now>=l) {
change(now,a[now]);
a[now]=sqrt(a[now]);
if(a[now]<=) fa[now]=find(fa[now-]);
now=find(fa[now-]);
}
}
else {
printf("%lld\n",query(r)-query(l-));
}
}
return ;
}
最新文章
- java 字符串转成 json 数组并且遍历
- TEX学习笔记
- 经验分享:CSS浮动(float,clear)通俗讲解
- MyEclipse Spring 学习总结二 Bean的生命周期
- HDU-4507 吉哥系列故事——恨7不成妻 数位DP
- Shell脚本:使用rsync备份文件/目录
- 空间session失效的解决方法
- 使用VS连接SQLServe时提示未能载入文件或程序集“System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKey
- SQL把做个字段组合成一个字符串
- 巧用test判断来写shell脚本
- java基础之类与对象3
- [我所理解的REST] 3.基于网络应用的架构
- offline页面开发常用方法及页面控件验证
- C++多态及其实现原理
- C# 处理Excel公式(一)——创建、读取Excel公式
- Codeforces 513E2 Subarray Cuts dp (看题解)
- jquery实现同时展示多个tab标签+左右箭头实现来回滚动(美化版增加删除按钮)
- layui upload 后台获取不到值
- js之添加浏览器历史记录
- web(二)html
热门文章
- [转]多多“亦”善:把大量内容放到一页PPT的5个技巧
- redis系列文章目录
- PJSIP-PJLIB(samples) (the usage of the pjlib lib) (eg:string/I/O)
- 恢复误删除表黑科技之relay log大法
- python 学习分享-select等
- day02-python基础2
- StaticBox布局管理器
- 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数
- 聊聊、Spring ServletContainerInitializer
- Struts2 学习笔记