loj 6270 資料結構板子題

2021-09-18 09:08:00 字數 1434 閱讀 9708

首先可以看出這是log

2log^2

log2

的三維數點問題

然後你就t了

考慮兩個區間a,b的情況有

1、a包含b

2、ab相交但不包含

3、b包含a

考慮第1種情況的區間長度大於b的長度

問題可以轉化成查詢b包含的區間中小於等於區間長度-小於k的數量

我們可以將詢問和區間按區間長度排序

查詢包含的區間數量是:

右 端點

在[1,

r]−左

端點在[

1,l−

1]的數

量右端點在[1,r]-左端點在[1,l-1]的數量

右端點在[1

,r]−

左端點在

[1,l

−1]的

數量這個可以用樹狀陣列解決

#include

#include

#include

using

namespace std;

#define dd c=getchar()

intread()

#undef dd

void

write

(int x)

void

wln(

int x)

void

wsp(

int x)

const

int n =

5e5+7;

struct seg

}a[n]

;struct node

}q[n<<1]

;int n,m,q,cnt;

int ans[n]

;struct tree

intquery

(int x)

intquery

(int l,

int r)

}t1,t2;

intmain()

; q[

++cnt]

=(node);}

sort

(a+1

, a+n+1)

;sort

(q+1

, q+cnt+1)

;for

(int i =

1, j =

1; i <= cnt; i++

) ans[q[i]

.id]

+=q[i]

.v*(t2.

query

(q[i]

.r)-t1.

query

(q[i]

.l-1))

;}for(

int i =

1; i <= q; i++

)wln

(ans[i]);

}

資料結構板子

include include define maxn 100005 using namespace std int n,m long long a maxn d maxn 18 inline int read return n inline void rmq pre for int j 1 1 1...

資料結構題

題目背景 把一張紙對折100次就和珠穆朗瑪峰一樣高了哦 syh 題目描述 注 本系列題不按難度排序哦 第一行乙個n,m 接下來一行n個數表示a i 接下來m行,每行l,r,l1,r1,x,表示求get l,r,x get l1,r1,x 輸出描述 3 m行,先輸出get l,r,x 再輸出get l...

資料結構題

題目背景 把一張紙對折100次就和珠穆朗瑪峰一樣高了哦 syh 題目描述 注 本系列題不按難度排序哦 第一行乙個n,m 接下來一行n個數表示a i 接下來m行,每行l,r,l1,r1,x,表示求get l,r,x get l1,r1,x 輸出描述 3 m行,先輸出get l,r,x 再輸出get l...