2017ICPC網路賽北京賽區 I題

2021-08-08 16:19:44 字數 2862 閱讀 2001

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