【権限付き中間位数】CodeForce 1053 C Putting Boxes Together
1671 ワード
S o u r c e:Source:Codeforces Round Tag 512(Div.1、based o n Technocup 2019 Elimination Round 1)P r o b e m:Probelm:n=2 e 5つのアイテムを左から右に並べて、i番目のアイテムの位置pos[i].毎回お聞きしますが、pos[l]…….pos[r]というアイテムをある連続区間[x,x+(r-l)]に移すと、アイテムが重複しないので、品物がd*w[i]を移動するには最低いくらかかりますか?そして重量を修正する操作があります.I d e a:Idea:Idea:各アイテムをp o s[i]-=iに変換すると、問題はアイテムを同じ点に移動させ、帯権中間位の問題となりました.posは秩序であるため、二分s m L<s mL<sumR sumL<sumRがM M点を見つけて、A n=w[i]s[i]s[87 a b]s[/b]([Anpos]As[/b]]]s[/b]]s[b]]]s[/b[/b]]]s[/b[/fos[fos[fos[fos[fos[fos[fos]m[fos]]]]]]m[fos[fob]]m[fos[fos]m[fos[fob]ab s(pos[M]−pos[i])w[i]とw[i]p o s[i]とw[i]*pos[i]w[i]とw[i]pos[i]とw[i]pos[i]をメンテナンスします.C o d e:Code:Code:
#include
using namespace std;
#define I inline
typedef long long LL;
const int N = 2e5+10;
const int MOD = 1e9+7;
I void add(LL &a, const LL &b) { if((a+=b) >= MOD) a -= MOD; }
int a[N], w[N];
LL c1[N], c2[N];
I LL sum1(int x) { LL ret=0; while(x) ret+=c1[x], x-=(x&-x); return ret; }
I void add1(int x, LL d) { while(x>1;
if(2*(sum1(M)-t) < sum) L = M+1;
else R = M;
}
LL t1 = ((sum1(L)-t)%MOD*a[L]%MOD-(sum2(L)-sum2(x-1))%MOD)%MOD;
LL t2 = (-(sum1(y)-sum1(L))%MOD*a[L]%MOD+(sum2(y)-sum2(L))%MOD)%MOD;
LL ans = (t1+t2)%MOD;
printf("%lld
", (ans+MOD)%MOD);
}
}
}
int main() {
work();
return 0;
}