浮游大陸的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 52 3 4 5
1 2 3 4 5
1 1 5
3 1 5
2 3 3
3 3 3
1 5 5
輸出樣例#1:複製
125729070
對於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布置地雷以阻擋螞蟻們的進攻。題目描述 ...