Can you answer these queries? HDU - 4027(线段树+技巧)
题意:给一个数组序列, 数组长度为100000
两种操作: 一种操作是将某一个固定区间所有数开方(向下取整)
另一种操作是询问某个区间的所有数字之和。
就是在修改的时候加一个判断即可。。
还要注意 a 可能 比 b 大
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = , INF = 0x7fffffff;
typedef long long LL;
int a, b, x, y;
LL ans; struct node{
int l, r;
LL w, f;
}Node[maxn*+]; void build(int k, int ll, int rr)
{
Node[k].l = ll, Node[k].r = rr;
if(Node[k].l == Node[k].r)
{
scanf("%lld",&Node[k].w);
return;
}
int m = (ll + rr) / ;
build(k<<, ll, m);
build(k<<|, m+, rr);
Node[k].w = Node[k*].w + Node[k*+].w;
} void chp(int k)
{
if(Node[k].l == Node[k].r)
{
Node[k].w = floor(sqrt((double)Node[k].w));
return;
}
if(Node[k].l >= a && Node[k].r <= b && Node[k].r - Node[k].l + == Node[k].w){
return;
}
// if(Node[k].f) down(k);
int m = (Node[k].l + Node[k].r) / ;
if(a <= m) chp(k<<);
if(b > m) chp(k<<|);
Node[k].w = Node[k<<].w + Node[k<<|].w;
} void qinter(int k)
{
if(Node[k].l >= a && b >= Node[k].r)
{
ans += Node[k].w;
return;
}
int m = (Node[k].l + Node[k].r) / ;
if(a <= m) qinter(k*);
if(b > m) qinter(k*+);
} int main()
{
int n, m, kase = ;
while(~scanf("%d",&n))
{
ans = ;
mem(Node, );
build(, , n);
scanf("%d",&m);
printf("Case #%d:\n",++kase);
for(int i=; i<m; i++)
{
int temp;
scanf("%d",&temp);
if(temp == )
{
scanf("%d%d",&a,&b);
if(a > b) swap(a, b);
chp();
}
else if(temp == )
{
ans = ;
scanf("%d%d",&a, &b);
if(a > b) swap(a, b);
qinter();
printf("%lld\n",ans);
}
}
printf("\n");
}
return ;
}
Can you answer these queries? HDU - 4027(线段树+技巧)的更多相关文章
- Can you answer these queries? HDU 4027 线段树
Can you answer these queries? HDU 4027 线段树 题意 是说有从1到编号的船,每个船都有自己战斗值,然后我方有一个秘密武器,可以使得从一段编号内的船的战斗值变为原来 ...
- V - Can you answer these queries? HDU - 4027 线段树 暴力
V - Can you answer these queries? HDU - 4027 这个题目开始没什么思路,因为不知道要怎么去区间更新这个开根号. 然后稍微看了一下题解,因为每一个数开根号最多开 ...
- Can you answer these queries? HDU - 4027 (线段树,区间开平方,区间求和)
A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use ...
- spoj gss2 : Can you answer these queries II 离线&&线段树
1557. Can you answer these queries II Problem code: GSS2 Being a completist and a simplist, kid Yang ...
- SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并
Can you answer these queries III SPOJ - GSS3 这道题和洛谷的小白逛公园一样的题目. 传送门: 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间 ...
- SPOJ GSS2 - Can you answer these queries II(线段树 区间修改+区间查询)(后缀和)
GSS2 - Can you answer these queries II #tree Being a completist and a simplist, kid Yang Zhe cannot ...
- Can you answer these queries III(线段树)
Can you answer these queries III(luogu) Description 维护一个长度为n的序列A,进行q次询问或操作 0 x y:把Ax改为y 1 x y:询问区间[l ...
- hdu4027Can you answer these queries?【线段树】
A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use ...
- 2018.10.16 spoj Can you answer these queries V(线段树)
传送门 线段树经典题. 就是让你求左端点在[l1,r1][l1,r1][l1,r1]之间,右端点在[l2,r2][l2,r2][l2,r2]之间且满足l1≤l2,r1≤r2l1\le l2,r1 \l ...
- GSS1 - Can you answer these queries I(线段树)
前言 线段树菜鸡报告,stO ZCDHJ Orz,GSS基本上都切完了. Solution 考虑一下用线段树维护一段区间左边连续的Max,右边的连续Max,中间的连续Max还有总和,发现这些东西可以相 ...
随机推荐
- kubespray 容器存储设备 -- rook ceph
1./root/kubespray/roles/docker/docker-storage/defaults/main.yml #在用kubespray部署集群是制定docker用什么设备 dock ...
- 循环神经网络RNN的基本介绍
本博客适合那些BP网络很熟悉的读者 一 基本结构和前向传播 符号解释: 1. $c_{t}^{l}$:t时刻第l层的神经元的集合,因为$c_{t}^{l}$表示的是一层隐藏层,所以图中一个圆圈表示多个 ...
- 如何应用ML的建议-上
本博资料来自andrew ng的13年的ML视频中10_X._Advice_for_Applying_Machine_Learning. 遇到问题-部分(一) 错误统计-部分(二) 正确的选取数据集- ...
- golang 常用包安装
常用到的: go get -v github.com/nsf/gocode go get -v github.com/rogpeppe/godef go get -v golang.org/x/too ...
- SQL Server 索引中include的魅力(具有包含性列的索引)(转载)
开文之前首先要讲讲几个概念 [覆盖查询] 当索引包含查询引用的所有列时,它通常称为“覆盖查询”. [索引覆盖] 如果返回的数据列就包含于索引的键值中,或者包含于索引的键值+聚集索引的键值中,那么就不 ...
- Luogu3191 HNOI2007 紧急疏散 二分答案、最大流
传送门 题意:自己去看 考虑二分答案.$BFS$预处理出每一个人到每一扇门的最短时间,设二分的值为$mid$,那么把门拆成$mid$个点,每一个点代表第$1,2,...,mid$秒时的状态.$i-1$ ...
- BZOJ4552 HEOI/TJOI2016 排序 线段树、二分答案
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 题意:给出一个$1$到$N$的全排列,对其进行$M$次排序,每次排序将区间$[l ...
- 把一个List<T>的数据复制至另一个List<T>
把一个数据集List<T>复制至到另一个数据集List<T>. 方法一,可以使用循环,然后把每一个T添加至另一个集合中去: public void ListDemo() { , ...
- JSON WEB TOKEN,简单谈谈TOKEN的使用及在C#中的实现
十年河东,十年河西,莫欺少年穷. 学无止境,精益求精. 突然发现整个十月份自己还没有写一篇博客......哎,说出来都是泪啊,最近加班实在实在实在是太多了,真的没有多余的时间写博客.这不,今天也在加班 ...
- [linux]查询多个 trace 文件中,包含特定内容的文件
例如 目录是 /home/oracle/abc/trace 命令如下:oracle@node1 trace]$ find ./ -name "*.trc" | xargs grep ...