ACM-ICPC北京赛区(2017)网络赛_Minimum
题目9 : Minimum
描述
You are given a list of integers a0, a1, …, a2^k-1.
You need to support two types of queries:
1. Output Minx,y∈[l,r] {ax∙ay}.
2. Let ax=y.
输入
The first line is an integer T, indicating the number of test cases. (1≤T≤10).
For each test case:
The first line contains an integer k (0 ≤ k ≤ 17).
The following line contains 2k integers, a0, a1, …, a2^k-1 (-2k ≤ ai < 2k).
The next line contains a integer (1 ≤ Q < 2k), indicating the number of queries. Then next Q lines, each line is one of:
1. 1 l r: Output Minx,y∈[l,r]{ax∙ay}. (0 ≤ l ≤ r < 2k)
2. 2 x y: Let ax=y. (0 ≤ x < 2k, -2k ≤ y < 2k)
输出
For each query 1, output a line contains an integer, indicating the answer.
- 样例输入
-
1
3
1 1 2 2 1 1 2 2
5
1 0 7
1 1 2
2 1 2
2 2 2
1 1 2 - 样例输出
-
1
1
4 典型的线段树单点更新与区间最大(小)值,没什么奥妙,但是自己还是打挫了,连WA带T13发,233,最终在一位小姐姐的指导小改掉一些细节错误成功A一发 附上AC代码:#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring> using namespace std; const int MAXNODE = (<<)+;
const int MAX = 2e7+;//2*10^6+10
const int INF = 0x7fffffff; struct NODE{
int maxvalue, minvalue;
int left, right;
}node[MAXNODE]; int father[MAX]; void BuildTree(int i, int left, int right)
{
node[i].minvalue = INF;
node[i].maxvalue = -INF;
node[i].left = left;
node[i].right = right;
if(right == left)
{
father[left] = i;
return;
}
BuildTree(i<<, left, (int)(floor(left+right)/2.0));
BuildTree((i<<)+, (int)(floor(left+right)/2.0)+, right);
} //自底向上更新
void UpdateTree(int ri)
{
if(ri <= )
return;
int fi = ri/;
int a = node[fi<<].maxvalue;
int b = node[(fi<<)+].maxvalue;
node[fi].maxvalue = max(a, b);
a = node[fi<<].minvalue;
b = node[(fi<<)+].minvalue;
node[fi].minvalue = min(a, b);
UpdateTree(ri/);
} int Max, Min; //自顶向上查询
void Query_max(int i, int l, int r)
{
if(node[i].left == l && node[i].right == r)
{
Max = max(Max, node[i].maxvalue);
return;
} i <<= ;
if(l <= node[i].right)
{
if(r <= node[i].right)
{
Query_max(i, l, r);
}
else
{
Query_max(i, l, node[i].right);
}
}
i++;
if(r >= node[i].left)
{
if(l >= node[i].left)
{
Query_max(i, l, r);
}
else
{
Query_max(i, node[i].left, r);
}
}
} void Query_min(int i, int l, int r)
{
if(node[i].left == l && node[i].right == r)
{
Min = min(Min, node[i].minvalue);
return;
} i <<= ;
if(l <= node[i].right)
{
if(r <= node[i].right)
{
Query_min(i, l, r);
}
else
{
Query_min(i, l, node[i].right);
}
}
i++;
if(r >= node[i].left)
{
if(l >= node[i].left)
{
Query_min(i, l, r);
}
else
{
Query_min(i, node[i].left, r);
}
}
} int main()
{
int k, t, n, g, a, b, c;
long long ans;
ios::sync_with_stdio(false);
cin>>t;
//cout<<INF<<-INF<<endl;
while(t--)
{
cin>>k;
BuildTree(, , <<k);
for(int i = ; i <= <<k; i++)
{
cin>>g;
node[father[i]].maxvalue = node[father[i]].minvalue = g;
UpdateTree(father[i]);
}
cin>>n;
for(int i = ; i <= n; i++)
{
Max = -INF;
Min = INF;
cin>>a>>b>>c;
if(a == )
{
Query_max(, b+, c+);
Query_min(, b+, c+);
//cout<<Max<<" "<<Min<<endl;
if(Max <= )
{
ans = (long long)Max*Max;
cout<<ans<<endl;
}
else if(Min >= )
{
ans = (long long)Min*Min;
cout<<ans<<endl;
}
else
{
ans = (long long)Min*Max;
cout<<ans<<endl;
}
}
else if(a == )
{
node[father[b+]].maxvalue = node[father[b+]].minvalue = c;
UpdateTree(father[b+]);
}
}
}
return ;
}
ACM-ICPC北京赛区(2017)网络赛_Minimum的更多相关文章
- hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)
#1578 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for ...
- ACM-ICPC北京赛区(2017)网络赛1【模拟+枚举+数组操作】
题目1 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for n ...
- hihoCoder 1582 Territorial Dispute 【凸包】(ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)
#1582 : Territorial Dispute 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In 2333, the C++ Empire and the Ja ...
- hihoCoder 1584 Bounce 【数学规律】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)
#1584 : Bounce 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 For Argo, it is very interesting watching a cir ...
- hihoCoder 1586 Minimum 【线段树】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)
#1586 : Minimum 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a list of integers a0, a1, …, a2 ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 题目9 : Minimum
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a list of integers a0, a1, …, a2^k-1. You need t ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 i题 Minimum(线段树)
描述 You are given a list of integers a0, a1, …, a2^k-1. You need to support two types of queries: 1. ...
- 【分类讨论】【计算几何】【凸包】hihocoder 1582 ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 E. Territorial Dispute
题意:平面上n个点,问你是否存在一种黑白染色方案,使得对于该方案,无法使用一条直线使得黑色点划分在直线一侧,白色点划分在另一侧.如果存在,输出一种方案. 如果n<=2,显然不存在. 如果所有点共 ...
- 【线段树】hihocoder 1586 ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 I. Minimum
题意:给你一个序列(长度不超过2^17),支持两种操作:单点修改:询问区间中最小的ai*aj是多少(i可以等于j). 只需要线段树维护区间最小值和最大值,如果最小值大于等于0,那答案就是minv*mi ...
随机推荐
- 分享一个数据库工具DTOOLS
整理电脑的时候发现一个好的工具——DTOOLS,他是我在09年左右写的一个数据库工具. 可以干什么呢? 我罗列一下: 1.全面的展示数据库字段情况 2. 迅速切换,展示数据库记录情况,不输语句,即点即 ...
- 给MySQL_5.7 配置环境变量
给MySQL_5.7 配置环境变量... 1.右键我的电脑--选择属性 2.选择高级系统设置 3.根据MySQL的安装路径.来配置MYSQL_HOME环境变量 找到MySQL5.7的安装根目录 4 ...
- super函数没有那么简单-super原理剖析
开始之前,先出一道题: #super函数探讨 class A(object): def __init__(self): print 'A.__init__' class B(A): def __ini ...
- Just for Today
Just for today I will try to live through this day only and not tackle my whole life problem at once ...
- OC
一,字符串 1创建一个字符串 1) NSString *str2=[[NSString alloc]initWithString:str1]; 2) NSString *string2=[[NSSt ...
- 支付宝小程序PHP全栈开发--前端样式的设计.acss样式详解
关于.acss文件 在视频中已经说过了,小程序的设计思想和原生app的设计思想颇为相似,基本的应用单元为页面.当然对于一个页面来说每一个元素的放置位置在哪儿以及显示成什么样子这个是由样式来决定的.我们 ...
- LVS-DR实现web调度模式
author:JevonWei 版权声明:原创作品 实现LVS-DR调度web模式 拓扑环境 网络环境 RS1 RIP 192.168.198.138/24 VIP 192.168.198.100/3 ...
- JVM(二)JVM内存布局
这几天我再次阅读了<深入理解Java虚拟机>之第二章"Java内存区域与内存溢出异常",同时也参考了一些网上的资料,现在把自己的一些认识和体会记录一下. (本文为博主 ...
- [C#] 分布式ID自增算法 Snowflake
最近在尝试EF的多数据库移植,但是原始项目中主键用的Sqlserver的GUID.MySQL没法移植了. 其实发现GUID也没法保证数据的递增性,又不太想使用int递增主键,就开始探索别的ID形式. ...
- Core Java 谈谈HashMap
说起Java的HashMap相信大家都不是很陌生,但是对于HashMap内部结构有些同学可能不太了解,咱们下一步就将其展开. HashMap是基于Hash算法的,同理的还有HashSet和HashTa ...