首先可以看出這是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...