粟粟的書架(主席樹 二維字首和)

2021-09-26 21:11:02 字數 1475 閱讀 9126

一下子做了兩個題?

題意:乙個問題求區間前k大的和,另乙個問題求矩形內前k大的和。

思路:前乙個問題直接上主席樹+二分搞定

後乙個問題由於資料範圍比較小,用cnt

[i][

j][k

]cnt[i][j][k]

cnt[i]

[j][

k]記錄字首矩形中大於等於k

kk的數有多少個,用pre

[i][

j][k

]pre[i][j][k]

pre[i]

[j][

k]記錄字首矩形中大於等於k

kk的數的和。利用這兩個東西套兩個二分即可

**清晰易懂,就不講了

#include "bits/stdc++.h"

#define hhh printf("hhh\n")

#define see(x) (cerr<<(#x)<<'='<<(x)inline int read()

const int maxn = 5e5+10;

const int mod = 1e9+7;

const double eps = 1e-9;

int n, m, t, tot;

int h[maxn], t[maxn<<5];

int sz[maxn<<5], l[maxn<<5], r[maxn<<5];

ll sum[maxn<<5];

void update(int x, int l, int r, int pre, int &now)

ll qksum(int k, int x, int y, int l, int r)

ll pre[205][205][1005];

int cnt[205][205][1005];

inline int qaq(int k, int x1, int y1, int x2, int y2)

inline ll qsum(int k, int x1, int y1, int x2, int y2)

int cnt=qaq(mid,x1,y1,x2,y2);

ll sum=pre[x2][y2][mid]-pre[x2][y1-1][mid]-pre[x1-1][y2][mid]+pre[x1-1][y1-1][mid];

return sum+=1ll*(k-cnt)*(mid-1);

}int main()

if(mid==y2-y1+1) printf("poor qlw\n");

else printf("%d\n", mid);}}

else

}for(int i=1; i<=n; ++i) }}

for(int i=0; iif(mid==tot+1) printf("poor qlw\n");

else printf("%d\n", mid);}}

}

1926 粟粟的書架 字首和 二分 主席樹

我們發現這道題其實是兩問 第一問是對於 r,c leq 200,m leq 200,000 是在矩形上的詢問 第二問是對於 r 1,c leq 500,000,m leq 20,000 是在序列上的詢問 所以我們寫兩個程式即可 首先我們來解決序列上的問題 很明顯我們在主席樹上二分查詢即可.o mlo...

BZOJ1926 粟粟的書架(主席樹,字首和)

第一行是三個正整數r,c,m。接下來是乙個r行c列的矩陣,從上到下 從左向右依次給出了每本書的頁數pi,j。接下來m行,第i行給出正整數x1i,y1i,x2i,y2i,hi,表示第i天的指定區域是 x1i,y1i 與 x2i,y2i 間 的矩形,總頁數之和要求不低於hi。保證1 x1i x2i r,...

二分,主席樹 洛谷 2468 粟粟的書架

給出乙個矩陣,問乙個子矩陣中至少要多少個數才能使和 h geq h h,多組資料,分成1 r c 200和r 1,1 c 500000 1 leq r,c leq 200和r 1,1 leq c leq 500000 1 r,c 200和 r 1,1 c 5000 00這顯然是一道以二分為核心的題目...