ybt.1550 花神游历各国 题解
【题目描述】
花神喜欢步行游历各国,顺便虐爆各地竞赛。花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家)。
每一次旅行中,花神会选择一条旅游路线,它在那一串国家中是连续的一段,这次旅行带来的开心值是这些国家的喜欢度的总和,当然花神对这些国家的喜欢程序并不是恒定的,有时会突然对某些国家产生反感,使他对这些国家的喜欢度变为 (可能是花神虐爆了那些国家的 OI,从而感到乏味)。
现在给出花神每次的旅行路线,以及开心度的变化,请求出花神每次旅行的开心值。
【Input】
第一行是一个整数 NN,表示有 NN 个国家;
第二行有 NN 个空格隔开的整数,表示每个国家的初始喜欢度;
第三行是一个整数 MM,表示有 MM 条信息要处理;
第四行到最后,每行三个整数 x,l,rx,l,r,当 x = 1时询问游历国家 ll 到 rr 的开心值总和,就是 ,当 x = 2 时国家 ll 到 rr 中每个国家的喜欢度变为 。
【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
【Data range & Tips】
对于全部数据,
注:建议使用 sqrt 函数,且向下取整。
【Solution】
没跑满,然后过了(神奇)!
区间修改时不打懒标记,把区间内每个叶子节点都遍历(我不知道开根号怎么打懒标记)
然后有个小优化:
维护maxn记录当前区间最大的数,因为1,0开方和原值一样,所以当时就return;
【Code】
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
struct Segment_Tree{long long sum,maxn;
}tree[1000000];
int n,m,a[100100],op,ll,rr;
inline void build(int k,int l,int r){if(l==r){tree[k].sum=a[l];tree[k].maxn=a[l];return;}int mid=(l+r)>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum;tree[k].maxn=max(tree[k<<1].maxn,tree[k<<1|1].maxn);
}
inline void modify(int k,int l,int r,int x,int y){if(l>y||r<x)return;if(tree[k].maxn<=1)return;if(l==r){tree[k].sum=floor(sqrt(tree[k].sum));tree[k].maxn=tree[k].sum;return;}int mid=(l+r)>>1;if(x<=mid)modify(k<<1,l,mid,x,y);if(y>mid)modify(k<<1|1,mid+1,r,x,y);tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum;tree[k].maxn=max(tree[k<<1].maxn,tree[k<<1|1].maxn);
}
inline long long Ask(int k,int l,int r,int x,int y){if(l>y||r<x)return 0;if(l>=x&&r<=y)return tree[k].sum;int mid=(l+r)>>1;long long res=0;if(x<=mid)res+=Ask(k<<1,l,mid,x,y);if(y>mid)res+=Ask(k<<1|1,mid+1,r,x,y);return res;
}
int main(){scanf("%d",&n);for(register int i=1;i<=n;i++)scanf("%d",&a[i]);build(1,1,n);scanf("%d",&m);for(register int i=1;i<=m;i++){scanf("%d%d%d",&op,&ll,&rr);if(op==1){printf("%lld\n",Ask(1,1,n,ll,rr)); }else{modify(1,1,n,ll,rr);}}return 0;
}
ybt.1550 花神游历各国 题解相关推荐
- 花神游历各国 题解(小清新线段树/树状数组+并查集)
题面 众所周知,这是一道小清新线段树 然而可以用树状数组水过去且跑得飞快 看到区间开方第一反应肯定是线段树懒标记区间修改之类的,但是这个东西似乎确凿不可维护 所以考虑暴力循环单点修改->T飞 于 ...
- 3211: 花神游历各国
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 1042 Solved: 381 [Submit][Status] Desc ...
- BZOJ3211: 花神游历各国
BZOJ3211: 花神游历各国 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 ...
- [BZOJ3211] 花神游历各国 - 线段树
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 4766 Solved: 1741 [Submit][Status][Dis ...
- bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 3438 Solved: 1277 [Submit][Status][Dis ...
- 【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]
P4145 上帝造题的七分钟2 / 花神游历各国 把一段区间里的每个数都开方 求区间和 可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不 ...
- 1550:花神游历各国
[题目描述] 原题来自:BZOJ 3211 花神喜欢步行游历各国,顺便虐爆各地竞赛.花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并 ...
- 1276. 花神游历各国
花神喜欢步行游历各国,顺便虐爆各地竞赛. 花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家). 每一次旅行中,花神 ...
- 花神游历各国(线段树)
题目描述: 花神喜欢步行游历各国,顺便虐爆各地竞赛.花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家). 每一次旅 ...
最新文章
- Arcgis for JS之Cluster聚类分析的实现
- UnityShader入门精要-3.3 UnityShader的结构
- linux查看wan的ip地址,查看wan口ip地址操作方法
- Recommended Journals for MPhil degree at Business Model Innovation Group
- QT的QNdefFilter类的使用
- oracle如何在本地建库,oracle在本地建库
- 搞懂Transformer
- java关键字汉化_java关键字是什么
- pytorch 中网络参数 weight bias 初始化方法
- BGP(3):BGP 的路径优选
- web开发必备的几个软件
- 验证世界各地区手机号码libphonenumber
- mysql环境变量配置还是不行_为什么要配置mysql环境变量
- 计算机桌面下方任务栏图标不见了,任务栏显示桌面图标不见怎么办
- homeassistant搭建_智能家居 篇二:Home Assistant简易智能家居环境搭建
- Android打开项目一直build的问题解决
- 建立数据驱动,关键字驱动和混合Selenium框架这些你了解吗
- OPCUA协议: 复杂服务器C语言初步实践(回调与方法)
- Java8 lambda表达式详解
- 一、什么是Nginx? Nginx的作用是什么?
热门文章
- 华为手机android测试工程师,【华为招聘】华为应用市场招聘Java,android及测试工程师...
- split多个分隔符进行分割
- 涌泉蜜桔,无核化渣,绝了
- AWS训练营培训笔记
- C# 中的多线程实现方式
- html5 矢量图形插件,HTML5画布矢量图形?
- 百度地图引用报错A parser-blocking, cross site (i.e. different eTLD+1) script
- from pdfminer.pdfinterp import PDFResourceManager, process_pdf ImportError: cannot import name 'proc
- java基于springboot的人脸识别企业排班考勤系统之人脸识别模块的设计和实现
- 锁7---分段锁(一种锁的形式)