洛谷P3932 浮游大陸的68號島

2022-03-01 06:17:56 字數 3306 閱讀 3715

浮游大陸的68號島,位於浮游大陸的邊境地帶。平時很少有人造訪。

島上被濃厚的森林覆蓋。

在這座邊境地區不起眼的浮游島上,建立著神秘的」兵器「管理倉庫——妖精倉庫。

妖精倉庫裡生活著**妖精們,她們過著快樂,卻隨時準備著迎接死亡的生活。

換用更高尚的說法,是隨時準備著為這個無藥可救的世界獻身。

然而孩子們的生活卻總是無憂無慮的,幼體的**妖精們過著天真爛漫的生活,自然也無暇考慮什麼拯救世界之類的重任。

有一天小妖精們又在做遊戲。這個遊戲是這樣的。

妖精倉庫的儲物點可以看做在乙個數軸上。每乙個儲物點會有一些東西,同時他們之間存在距離。

每次他們會選出乙個小妖精,然後剩下的人找到區間$[l,r]$儲物點的所有東西,清點完畢之後問她,把這個區間內所有儲物點的東西運到另外乙個倉庫的代價是多少?

比如儲物點$i$有$x$個東西,要運到儲物點$j$,代價為

$$x \times \mathrm( i , j )$$

dist就是倉庫間的距離。

當然啦,由於小妖精們不會算很大的數字,因此您的答案需要對19260817取模。

輸入格式:

第一行兩個數表示$n,m$

第二行$n-1$個數,第$i$個數表示第$i$個儲物點與第$i+1$個儲物點的距離

第三行$n$個數,表示每個儲物點的東西個數

之後$m$行每行三個數x l r

表示查詢要把區間$[l,r]$儲物點的物品全部運到儲物點x的花費

輸出格式:

對於每個詢問輸出乙個數表示答案

輸入樣例#1:複製

5 5

2 3 4 5

1 2 3 4 5

1 1 5

3 1 5

2 3 3

3 3 3

1 5 5

輸出樣例#1:複製

125729

070

對於30%的資料,$n , m \le 1000$

對於另外20%的資料,所有儲物點間的距離都為1

對於另外20%的資料,所有儲物點的物品數都為1

對於100%的資料 ,$ n , m \le 200000 ; a_i , b_i <= 2\cdot 10^9$

我在考試的時候畫呀畫有時沒有畫出來,到最後寫了乙個線段樹卡過去了。看題解才知道這題正解是字首和。╮( ̄▽ ̄")╭還是本蒟蒻數學功底太差了,沒有向數學模型去轉化......

我要說一句 c++ mod自帶大常數,在保證答案正確的情況下能少用就少用吧。

#include#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=200000+5

;const ll mod=19260817

;template

inline

void read(t &x)

}int

n,m;

ll sum1[maxn],sum2[maxn],dis[maxn];

intmain()

for(int i=1;i<=n;++i)

intx,l,r; ll ans;

for(int i=1;i<=m;++i)

else

if(x>=r)

else

if(x>l&&xprintf(

"%lld\n

",ans);

}return0;

}

這是一種離線的做法,先與處理出來所有點都移動到第乙個點,處理目標點為1的答案,然後將目標點向右移,關係式應該很好推。

#include#include

#include

#include

#define lson now<<1,l,mid

#define rson now<<1|1,mid+1,r

using

namespace

std;

typedef

long

long

ll;const

int maxn=200000+5

;const ll mod=19260817

;template

inline

void read(t &x)

}int

n,m;

ll dis[maxn],num[maxn],ans[maxn],tmp[maxn],s[maxn],c[maxn];

ll sum[maxn

<<2],tag[maxn<<2],sum2[maxn<<2

];struct

ask}q[maxn];

inline

void pushup(int

now)

inline

void pushdown(int

now)

void bt(int now,int l,int

r)

int mid=(l+r)>>1

; bt(lson); bt(rson);

pushup(now);

}void update(int now,int l,int r,int x,int y,int

k) pushdown(now);

int mid=(l+r)>>1

;

if(x<=mid) update(lson,x,y,k);

if(y>mid) update(rson,x,y,k);

pushup(now);

}ll query(

int now,int l,int r,int x,int

y)int

main()

for(int i=1;i<=n;++i) read(num[i]);

for(int i=1;i<=m;++i)

sort(q+1,q+m+1

);

int cur=1

;

for(int i=1;i<=n;++i)

}bt(

1,1,n);

for(int i=2;i<=n;++i)

}for(int i=1;i<=m;++i)

printf(

"%lld\n

",ans[i]);

}

P3932 浮游大陸的68號島

p3932 浮游大陸的68號島 無聊找了個水題做。大概就是字首和亂搞一下沒了,除了字首和啥都沒有。建議降綠。考慮對於乙個點 i 到詢問點 x 然後沒啥東西。詢問區間拆開分開做就完了。name author gensokyo alice date description include include...

洛谷3932 浮游大陸的68號島 題解

題面慢慢讀吧 滑稽。設d i 為1 i的距離,a i 為儲蓄點i的貨物個數。假設x在r的右邊,則有 a a dis a,x a b dis b,x 展開可得d x a a a b d a a a d b a b 於是線段樹維護區間貨物個數以及d i a i 的區間和即可。剩下的情況大致相同就不多說了...

貪婪大陸(洛谷P2184)

題目背景 面對螞蟻們的瘋狂進攻,小ff的tower defence宣告失敗 人類被螞蟻們逼到了greed island上的乙個海灣。現在,小ff的後方是一望無際的大海,前方是變異了的超級螞蟻。小ff還有大好前程,他可不想命喪於此,於是他派遣手下最後一批改造scv布置地雷以阻擋螞蟻們的進攻。題目描述 ...