hdu 3874 線段樹 離線查詢

2021-07-12 01:59:10 字數 697 閱讀 8950

要求乙個區間所有數之和 求和時要去重 

離線查詢 先把所有查詢離線 然後按照右端點排序 每次保證加入後乙個數的時候線段樹中沒有和他重複的 如果重複就把前乙個刪掉 這樣由於之前排序過 保證不會漏解

#include#include#include#define lson l,mid,rt<<1

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

using namespace std;

#define ll __int64

const int n=50010;

const int m=200010;

struct node

q[m];

int n,a[n],vis[1000010];

ll sum[n<<2],ans[m];

void pushup(int rt)

void update(int p,int add,int l,int r,int rt)

int mid=l+r>>1;

if(p<=mid) update(p,add,lson);

else update(p,add,rson);

pushup(rt);

}ll query(int l,int r,int l,int r,int rt)

bool cmp(node a,node b)

{ return a.r

HDU 3874 離線線段樹

統計區間內所有數字和,對於重複出現的只統計一次 線段樹的離線演算法 按結束座標排序,然後掃一遍,遇到重複的,就把之前插入線段樹的給刪掉 include stdio.h include string.h include algorithm using namespace std struct node...

HDU3874 莫隊演算法,模板)

題意 給定乙個陣列,每次詢問乙個區間 l,r 求區間內所有數字的和,出現多次的數字只加一次 解題思路 莫隊演算法就適用於這種區間問題,且臨近點轉移比較方便的情況。複雜度最大應該也有o m sqrt n 但總比暴力的o mn 要好。include include include include def...

HDU 3333 離線線段樹

線段樹 給定乙個序列,求區間出現的數的數值和,若有多個,只計算一次 先離散化存數資料 對詢問區間按右節點排序,這樣我們每次維護的都是從前到當前位置,保證其重複元素不累加 跟新節點,對於之前出現過的刪除,並在新位置新增 然後查詢即可 include iostream include algorithm...