要求乙個區間所有數之和 求和時要去重
離線查詢 先把所有查詢離線 然後按照右端點排序 每次保證加入後乙個數的時候線段樹中沒有和他重複的 如果重複就把前乙個刪掉 這樣由於之前排序過 保證不會漏解
#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...