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 ...
随机推荐
- malloc/free 的使用要点
函数malloc的原型如下: void * malloc(size_t size); 用malloc申请一块长度为length的整数类型的内存,程序如下: int *p = (int *)mall ...
- Tomcat8安装及配置教程
Apache Tomcat8.0安装及配置教程.. Apache Tomcat8.0官方网站链接:http://tomcat.apache.org/ apache-tomcat-8.0.39-wi ...
- 转载_2016,Java成神初年
原文地址:http://blog.csdn.net/chenssy/article/details/54017826 2016,Java成神初年.. -------------- 时间2016.12. ...
- 迈向angularjs2系列(6):路由机制
目录1.angular-seed的路由2.路由机制的探索3.懒加载 一:angular-seed的路由 step1:安装种子项目 $ git clone --depth 1 https://gi ...
- jquery的2.0.3版本源码系列(2):21行-94行定义了一些变量和函数 jQuery=function(){}
2.1.bug通过索引查询 这里的#13335是bug的索引,如何查询呢? 第一步,浏览器地址栏输入"https://bugs.jquery.com/". 第二步,在网页的搜索框里 ...
- SQL Server内存
背景 最近一个客户找到我说是所有的SQL Server 服务器的内存都被用光了,然后截图给我看了一台服务器的任务管理器.如图 这里要说明一下任务管理器不会完整的告诉真的内存或者CPU的使用情况,也就是 ...
- [2013-01-15]The Little Schemer 学习笔记
<The Little Schemer> FP编程.lisp入门必备 这书貌似没中文版: 有英文pdf版:完整版下载链接 英文不好的,被前几页噎住的,可以先到这里看翻译好的前言部分 看完人 ...
- Shuffle 的 5步
Shuffle的本意是洗牌.混乱的意思,类似于java中的Collections.shuffle(List)方法,它会随机地打乱参数list里的元素顺序.MapReduce中的Shuffle过程.所谓 ...
- Day-6: 函数式编程
函数式编程就是封装成一个个函数,一次调用来完成复杂任务. 函数式编程的一个特点是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 高阶函数 高阶函数就是将函数的变量名作为参数传入,内部再对 ...
- 打开safari开发者选项
1.点击Safari启动浏览器 2.点击左上Safari标志,选择偏好设置 3.选择高级,勾选下方的在菜单栏显示开发菜单. 如此,Safari就出现了开发菜单,右键网页元素也会出现查看元素功能了.