题目9 : Minimum

时间限制:1000ms
单点时限:1000ms
内存限制:256MB

描述

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的更多相关文章

  1. hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

    #1578 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for ...

  2. ACM-ICPC北京赛区(2017)网络赛1【模拟+枚举+数组操作】

    题目1 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for n ...

  3. hihoCoder 1582 Territorial Dispute 【凸包】(ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

    #1582 : Territorial Dispute 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In 2333, the C++ Empire and the Ja ...

  4. hihoCoder 1584 Bounce 【数学规律】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

    #1584 : Bounce 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 For Argo, it is very interesting watching a cir ...

  5. hihoCoder 1586 Minimum 【线段树】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

    #1586 : Minimum 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a list of integers a0, a1, …, a2 ...

  6. ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 题目9 : Minimum

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a list of integers a0, a1, …, a2^k-1. You need t ...

  7. 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. ...

  8. 【分类讨论】【计算几何】【凸包】hihocoder 1582 ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 E. Territorial Dispute

    题意:平面上n个点,问你是否存在一种黑白染色方案,使得对于该方案,无法使用一条直线使得黑色点划分在直线一侧,白色点划分在另一侧.如果存在,输出一种方案. 如果n<=2,显然不存在. 如果所有点共 ...

  9. 【线段树】hihocoder 1586 ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 I. Minimum

    题意:给你一个序列(长度不超过2^17),支持两种操作:单点修改:询问区间中最小的ai*aj是多少(i可以等于j). 只需要线段树维护区间最小值和最大值,如果最小值大于等于0,那答案就是minv*mi ...

随机推荐

  1. Json安全

    1.不要使用顶级JSON数组,避免被<script>标签引用. 2.使用POST+密钥获取JSON,尽量不要用GET方式. 3.不要使用eval()将对象放入内存,eval()会执行所传入 ...

  2. 2017-4-25/设计缓存(LFU)

    1. 恒定缓存性能有哪些因素? 命中率.缓存更新策略.缓存最大数据量. 命中率:指请求缓存次数和缓存返回正确结果次数的比例.比例越高,缓存的使用率越高,用来衡量缓存机智的好坏和效率.如果数据频繁更新, ...

  3. Andrew Ng机器学习课程笔记--week2(多元线性回归&正规公式)

    1. 内容概要 Multivariate Linear Regression(多元线性回归) 多元特征 多元变量的梯度下降 特征缩放 Computing Parameters Analytically ...

  4. c++中string.erase()函数的用法(转)

    erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator p ...

  5. 高级java高并发,高性能,分布式,高可用,负载均衡,系统架构实战

    java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战 视频课程包含: ...

  6. JVM内存结构和6大区域

    摘自 http://www.iteye.com/news/30350 对于我们一般理解的计算机内存,它算是CPU与计算机打交道最频繁的区域,所有数据都是先经过硬盘至内存,然后由CPU再从内存中获取数据 ...

  7. [2012-06-18]awk利用关联数组合并记录

    问题源起:http://bbs.chinaunix.net/thread-3753784-1-1.html 代码如下 {% capture text %} $awk '{if(!a[$1]){a[$1 ...

  8. JS中的数据类型小结

    首先说说JS数据类型的分类.分为标准型和typeof类型(即控制台打印,浏览器区分) 标准型:基本类型中有:number.string.boolean.undefined.null  复合类型:obj ...

  9. SQL菜鸟学习札记(二)

    五月份一直在写SQL,之后写了一个期末大作业的项目,现在才有时间把之前遇到的各种奇怪的问题整理出来.下一部分札记应该是大作业中使用到的SQL的整理. 一.UPDATE SET语句后面可以并列赋值. 之 ...

  10. 最新城市二级联动json(2017-09)

    { '安徽': [ '合肥', '芜湖', '蚌埠', '淮南', '马鞍山', '淮北', '铜陵', '安庆', '黄山', '阜阳', '宿州', '滁州', '六安', '宣城', '池州', ...