來者不拒,去者不追考慮莫隊,挪動指標往區間 \([l,r]\) 中加入乙個數 \(x\),產生的貢獻就是 \(比 x 大的數之和 + 比 x 小的數的個數\times x +x\)
然後這樣是 \(o(n\sqrt m \log n\)) 的
發現如果不加最後那個 \(x\) 的話就是可差分的(等於對 \([1,r]\) 的貢獻減去對 \([1,l]\) 的貢獻),於是考慮二次離線
預處理簡單,二次離線的時候會產生 \(o(n)\) 此插入乙個數的修改和 \(o(n\sqrt n)\) 此詢問上面的那兩個資訊
在值域上分塊做到 \(o(1)\) 查詢,\(o(\sqrt n)\) 修改即可
最後輸出前把那個 \(x\) 加回來
#define n 500006
#define b 707
#define v 100000
#define vb 316
int n,m;
struct ask;
ask ask[n];
struct node;
std::vectorchange[n];
int belong[n];
long long a[n];
long long bsum[vb+6],sum[v+6],bnum[vb+6],num[v+6];
long long fxx[n],ans[n];
inline void pre()
for(int i=1;i<=n;i++) fxx[i]+=fxx[i-1];
std::memset(bsum,0,sizeof bsum);std::memset(sum,0,sizeof sum);std::memset(bnum,0,sizeof bnum);std::memset(num,0,sizeof num);
}int main()),ans[ask[i].id]-=fxx[l-1]-fxx[l-1],l=l;
// while(l>ask[i].l) ans[ask[i].id]-=fxx[--l];
if(r>r) change[l-1].push_back(),ans[ask[i].id]-=fxx[r]-fxx[r],r=r;
// while(r>ask[i].r) ans[ask[i].id]-=fxx[r--];
if(l// while(l} for(int i=1;i<=n;i++)
} for(int i=1;i<=n;i++) a[i]+=a[i-1];
for(int i=1;i<=m;i++) ans[ask[i].id]+=ans[ask[i-1].id];
for(int i=1;i<=m;i++) ans[ask[i].id]+=a[ask[i].r]-a[ask[i].l-1];
for(int i=1;i<=m;i++) writeen(ans[i]);
return ret;
}
認識P2P,利用P2P
是peer to peer的縮寫 好象還看到過文章說是point to point,我也不清楚,網上的資料也不清楚,鬱悶 peer在英語裡有 地位 能力等 同等者 同事 和 夥伴 等意義。這樣一來,p2p也就可以理解為 夥伴對夥伴 的意思,或稱為對等聯網。目前人們認為其在加強網路上人的交流 檔案交換...
P2P網路模型
1 靜態配置模型 靜態配置模型是一種相對靜態而簡單的對等點定位模型。在該模型中,每個對等點都確切地知道存在於其p2p 網路中其它對等點的位置以及它們所提供的共享資源內容。缺點 網路無法應付不能預知的隨機事件和臨時變更,比如對等點隨機進入和退出網路。優點 整個網路在外部攻擊面前表現得很穩固。2 動態配...
P2P路由演算法
p2p路由演算法 資源定位方法 dht distributed hash table 演算法 思想 每乙份資源都由一組關鍵字標示,系統對其中的每乙個關鍵字進行hash,根據hash的結果確定該關鍵字由哪個使用者負責儲存,使用者搜尋的同時,用同樣的演算法計算每乙個字的hash,再根據hash知道該關鍵...