2017icpc網路賽北京賽區 i題
描述 you are given a list of integers a0, a1, …, a2^k-1.
you need to support two types of queries:
output minx,y∈[l,r] .
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 l r: output minx,y∈[l,r]. (0 ≤ l ≤ r < 2k)
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 題意:操作1求區間內最小的ax*ay,ax,ay可以相等。要注意ai的大小可以是負數,所以要進行分類討論。當ai全部是負數的時候,答案是最大值x最大值;當ai全部是正數的時候,答案是最小值x最小值;當ai有正有負的時候,答案是最大值x最小值。
#include
#include
#include
#include
#include
#define n 100010
using
namespace
std;
typedef
long
long ll;
ll a[1500000];
struct treetree[1500000];
//延遲更新
void pushup(ll root)
void pushdown(ll root)
//初始化
void build(ll l,ll r,ll root)
ll mid=(l+r)>>1;
build(l,mid,root<<1);//左區間
build(mid+1,r,root<<1|1); //右區間
pushup(root);//把兒子的資訊更新到父親
//tree[root].num=min(tree[root<<1].num,tree[root<<1|1].num);
//tree[root].maxn=max(tree[root<<1].maxn,tree[root<<1|1].maxn);
return;
}//更新區間
void update(ll l,ll r,ll z,ll root)
pushdown(root);//用父親的資訊更新兒子
ll mid=tree[root].l+tree[root].r>>1;
if(r<=mid)update(l,r,z,root<<1);
else
if(l>mid)update(l,r,z,root<<1|1);
else
pushup(root);//更新父親
//tree[root].num=min(tree[root<<1].num,tree[root<<1|1].num);
//tree[root].maxn=max(tree[root<<1].maxn,tree[root<<1|1].maxn);
return ;
}//查詢區間資訊
ll query1(ll l,ll r,ll root)
pushdown(root);
ll mid=tree[root].l+tree[root].r>>1;
if(r<=mid)return query1(l,r,root<<1);
else
if(l>mid)return query1(l,r,root<<1|1);
else
return min(query1(l,mid,root<<1),query1(mid+1,r,root<<1|1));
}ll query2(ll l,ll r,ll root)
pushdown(root);
ll mid=tree[root].l+tree[root].r>>1;
if(r<=mid)return query2(l,r,root<<1);
else
if(l>mid)return query2(l,r,root<<1|1);
else
return max(query2(l,mid,root<<1),query2(mid+1,r,root<<1|1));
}int main()
else
if(minn>=0)
else
printf("%lld\n",ans);
}else }}
return
0;}
ICPC 南京賽區網路賽 A
題目大意就是,給你乙個數n 然後給你乙個公式求s,讓你輸出s n 這個題目不用想,直接用用題目中的公式暴力寫肯定超時 可以先手算簡化一下公式 n 1 n 1 n n 1 n 1 n!n 1 所以可得 s 1 1!n 1 n 1 2!1!3!2!n!n 1 n 1 所以s n n 1 n n 是n的倍...
ICPC2004北京賽區回憶
這次北京賽區的比賽,只有乙個字形容 慘。本來我還說努力拿銅獎的,結果希望在比賽一開始就基本破滅.我本人當然應該承擔很大一部分責任,正是我個人的失誤,導致最簡單的題目都被罰時2次。最後無果而終。13號是熱身賽,我們2 00來到陽光大廳準備。熱身有2題,a題是乙個數論,b題是乙個簡單的dp。我一開始就很...
2017ACM ICPC北京賽區
有n只貓,和m條魚,第i只貓吃掉一條魚所花的時間為c i 乙隻貓,吃完乙個會繼續吃 如果還有的話 問在x時刻後有多少條魚留下 分別輸出完整的和不完整的 分析 暴力for一遍,trick 給每只貓設定乙個標記表示i秒的時候,它吃的魚還剩多少,這樣方便統計,便於模擬啊 include define ll...