HDU - 4027 线段树减枝
这题太坑了。。。满满的都是坑点
1号坑点:给定左右区间有可能是反的。。。因为题目上说x,y之间,但是没有说明x,y的大小关系(害我一直RE到怀疑人生)
2号坑点:开根号的和不等于和开根号(还好避开了)
3号坑点:当你明白了2号坑,你就会选择。。。单点更新,然后你就T飞了。其实一个1e18的数,开不了几次根就没了。。。所以修改多的情况下,大部分数很快降到1,当一个区间内部全是1,你还用一个个单点更新吗?所以就在2的基础上,加上如果这个区间的值的集合等于区间长度,直接返回,里面肯定全是1,还更新个屁啊。
4号坑点:当你觉得的自己稳了的时候,PE一发。。。末尾换行后再换行。。。WTF
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define LL long long
using namespace std;
const int maxn=;
LL a[maxn];
struct node{
int l,r;
LL val;
}tree[maxn<<];
LL sum;
inline int L(int r){return r<<;};
inline int R(int r){return r<<|;};
inline int MID(int l,int r){return (l+r)>>;};
void buildtree(int root,int l,int r){
tree[root].l=l;
tree[root].r=r;
tree[root].val=;
if (l==r){
tree[root].val=a[l];
return;
}
int mid=MID(l,r);
buildtree(L(root),l,mid);
buildtree(R(root),mid+,r);
tree[root].val=tree[L(root)].val+tree[R(root)].val;
}
void update(int root,int ul,int ur){
int l=tree[root].l;
int r=tree[root].r;
if (tree[root].val==r-l+){
return;
}
if (l==r){
tree[root].val=(LL)sqrt(tree[root].val);
return;
}
int mid=MID(l,r);
if (ur<=mid){
update(L(root),ul,ur);
}else if(ul>mid){
update(R(root),ul,ur);
}else {
update(L(root),ul,mid);
update(R(root),mid+,ur);
}
tree[root].val=tree[L(root)].val+tree[R(root)].val;
}
void query(int root,int ql,int qr){
int l=tree[root].l;
int r=tree[root].r;
if (ql<=l && r<=qr){
sum+=tree[root].val;
return;
}
int mid=MID(l,r);
if(qr<=mid){
query(L(root),ql,qr);
}else if(ql>mid){
query(R(root),ql,qr);
}else {
query(L(root),ql,mid);
query(R(root),mid+,qr);
}
}
int main(){
int n,m;
int cas=;
while(~scanf("%d",&n)){
printf("Case #%d:\n",cas++);
for (int i=;i<=n;i++){
scanf("%lld",&a[i]);
}
buildtree(,,n);
scanf("%d",&m);
int tmp1,tmp2,tmp3;
for (int i=;i<=m;i++){
scanf("%d%d%d",&tmp1,&tmp2,&tmp3);
if (tmp2>tmp3){
swap(tmp2,tmp3);
}
if(tmp1){
sum=;
query(,tmp2,tmp3);
printf("%lld\n",sum);
}else{
update(,tmp2,tmp3);
}
}
printf("\n");
}
return ;
}
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 这个题目开始没什么思路,因为不知道要怎么去区间更新这个开根号. 然后稍微看了一下题解,因为每一个数开根号最多开 ...
- HDU 4027 <线段树,区间√>
题目连接 题意 给出一个区间,每次把[l,r]内的值√,维护区间和. 坑: £:l会比r大,swap. £: 当f[i].sum=f[i].r-f[i].l+1;,不修改.因为保证每个数都大于等于1, ...
- hdu 4533 线段树(问题转化+)
威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 1166 线段树(sum+单点修改)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 3974 线段树 将树弄到区间上
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 3436 线段树 一顿操作
Queue-jumpers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 3397 线段树双标记
Sequence operation Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
随机推荐
- SQL Server 索引重建手册
注意: 索引重建前建议把数据库切换为完整模式,否则索引复制会在数据文件中进行,导致数据文件很大,而数据文件的收缩比日志文件的收缩要困难的多,且会对业务造成影响. 步骤一: 查询索引碎片,脚本如下,库比 ...
- ugui SetParent在安卓上一个诡异bug
问题描述 我的环境:Unity3D 5.3.7 出问题机型:安卓模拟器.部分低配安卓机型(比如:红米2A) 以下代码是设置某个节点的父节点,在PC.Editor.大部分手机上都是正常的,但问题机型上, ...
- 数据挖掘---Pandas的学习
Pandas介绍(panel + data + analysis) 为什么使用Pandas 便捷的数据处理能力 读取文件方便 封装了Matplotlib.Nu ...
- 服务创建&删除
创建服务.bat @echo.服务启动...... @echo off @sc create BestoneProductEditSvc binPath= "D:\winSvc\Beston ...
- 【Teradata】tdlocaledef修改默认日期配置
如下所有操作需要使用root登录到TD数据库节点操作 1.获取数据库当前默认配置 //使用root登录TD数据库节点 cd /opt/teradata/tdat/tdbms/xx.xx.xx.xx/b ...
- 创建ssh 服务的镜像
$ sudo docker run -ti ubuntu:14.04 /bin/bash #首先,使用我们最熟悉的 「-ti」参数来创建一个容器. root@fc1936ea8ceb:/# sshd ...
- win10 激活(亲测可用)
转自http://www.ylmfwin100.com/ylmf/8643.html 1.以管理员身份运行命令行(这一步一定要做) 2.依次输入以下命令 slmgr.vbs /upk (此时弹出窗口显 ...
- A1制作文件夹目录
第一步 在文件夹目录下建立bat文件,填写以下内容: dir *.* /B >目录.txt 最后双击bat文件. 第二步 运行后复制目录.txt文件内容到空白excel 使用hyperlink函 ...
- 5.03-requests_ssl
import requests url = 'https://www.12306.cn/mormhweb/' headers = { 'User-Agent': 'Mozilla/5.0 (Macin ...
- SQLite的原子提交--单文件场景
3. 单文件提交 我们首先概要说明SQLite在单个数据库文件上为了执行事务的原子提交而采取的步骤.在后面的部分将讨论如何设计文件格式以保护其在断电故障中损坏,以及原子提交在多个数据库上的执行. 3. ...