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 ...
随机推荐
- weblogic的web.xml报错----Malformed UTF-8 char -- is an XML encoding declaration missing
weblogic报错: Malformed UTF-8 char -- is an XML encoding declaration missing 把编码修改成utf8,上传到weblogic就报这 ...
- web前端(9)—— CSS属性
属性 终于到css属性,前面就零零散散的用了什么color,font-size之类,本篇博文就专项的介绍它了 字体属性 font-family 此属性是设置字体样式的,比如微软雅黑,方正书体,华文宋体 ...
- C#虚函数virtual详解
在面向对象编程中,有两种截然不同的继承方式:实现继承和接口继承.在实现继承时候,在Java中,所有函数默认都是virtual的,而在C#中所有函数并不默认为virtual的,但可以在基类中通过声明关键 ...
- EOS智能合约授权限制和数据存储
EOS智能合约授权限制和数据存储 在EOS合约中,调用合约需要来自账户的授权,同时还要指定需要调用的动作.当然,有的合约并不是所有账户都可以调用的,这就需要用到授权限制.接下来我们就来看看如何限制合约 ...
- netsh winsock reset命令,作用是重置 Winsock 目录
Win xp重置 编辑 要为 Windows XP 重置 Winsock,请按照下列步骤操作: 1.单击“开始”,运行中输入cmd. 2.然后输入命令 netsh winsock reset. 3.重 ...
- 基于centOS7:新手篇→tomcat安装配置
1.新环境,还没有安装lrzsz和unzip,先安装 yum -y install lrzsz yum -y install unzip 2.进入tomcat官网下载安装包,使用rz上传到服务器opt ...
- SpringCloud之初识Feign ----- 分布式负载自动拼接请求的URL
在前面的学习中,我们使用了Ribbon的负载均衡功能,大大简化了远程调用时的代码: String baseUrl = "http://user-service/user/"; Us ...
- 【车】汽车X40保养
参考文档: [养车成本]小保养331元,奔腾X40养车成本调查
- python 列表 元祖
# # 1,写代码,有如下列列表,按照要求实现每⼀一个功能li = ["alex", "WuSir", "ritian", "ba ...
- 在PHP中管理环境变量
在PHP中管理环境变量 现在我们都能用很多个编程语言开发,当我开始熟悉PHP时,我会忽略其它语言的特点.我用过其他语言(比如Node.js),但在PHP中没有看到一种轻松控制设置环境变量的方法,特别是 ...