二維莫隊 二維分塊 bzoj2639 矩形計算

2022-05-05 20:30:08 字數 2183 閱讀 7648

《法一》二維莫隊,對n和m分別分塊後,對塊從上到下從左到右依次編號,詢問以左上角所在塊編號為第一關鍵字,以右下角標號為第二關鍵字排序,轉移時非常厲害。

o(q*n*sqrt(n))。

#include#include#includeusing namespace std;

#define n 201

#define m 100001

struct lisant[n*n];

bool operator < (const lisan &a,const lisan &b)

sort(q+1,q+1+q);

for(int i=q[1].x1;i<=q[1].x2;++i)

for(int j=q[1].y1;j<=q[1].y2;++j)

insert(i,j);

anss[q[1].p]=ans;

for(int i=2;i<=q;++i)

for(int i=1;i<=q;++i)

printf("%d\n",anss[i]);

return 0;

}

《法二》二維分塊,分塊在矩陣中的擴充套件,預處理字首矩陣每個數出現的次數,以及所有「子矩塊」的答案。詢問的時候整塊的部分直接獲取,零散的部分暴力轉移。tle。

複雜度o(n^2+q)*n*sqrt(n),常數較大。

#include#include#include#include#includeusing namespace std;

int f,c;

inline void r(int &x)

inline void p(int x)

}#define n 202

#define bn 17

int n,m,nm;

struct pointnum[n][n];

inline bool operator == (const point &a,const point &b)

struct lisant[n*n];

inline bool operator < (const lisan &a,const lisan &b)

void init_ans()

for(int o=j;o<=l;++o)

for(int p=ln[k];p<=rn[k];++p)

for(int q=lm[o];q<=rm[o];++q)

--t[a[p][q]];

}}int q;

int main()

; point yx=(point);

int ans=0;

if(!(yx.x>=zs.x && yx.y>=zs.y))

for(int i=x1;i<=x2;++i)

for(int j=y1;j<=y2;++j)

--t[a[i][j]];

}else

int tx2=rn[yx.x];

int ty2=rm[yx.y]+1;

for(int i=x1;i<=tx2;++i)

for(int j=ty2;j<=y2;++j)

int tx3=rn[yx.x]+1;

int ty3=lm[zs.y];

for(int i=tx3;i<=x2;++i)

for(int j=ty3;j<=y2;++j)

int tx4=ln[zs.x];

int ty4=lm[zs.y]-1;

for(int i=tx4;i<=x2;++i)

for(int j=y1;j<=ty4;++j)

for(int i=x1;i<=tx;++i)

for(int j=y1;j<=ty;++j)

--t[a[i][j]];

for(int i=x1;i<=tx2;++i)

for(int j=ty2;j<=y2;++j)

--t[a[i][j]];

for(int i=tx3;i<=x2;++i)

for(int j=ty3;j<=y2;++j)

--t[a[i][j]];

for(int i=tx4;i<=x2;++i)

for(int j=y1;j<=ty4;++j)

--t[a[i][j]];

}p(ans),puts("");

}return 0;

}

二維莫隊解題報告

我寫的莫隊教程 其實這是一道bzoj上的題 bzoj2639,貌似是許可權題,反正我看不了 在yali做模擬賽的時候遇到了.然後在網上查到了幾篇關於這道題的部落格,都和我的做法略有不同.給你乙個 r c 的矩陣,每個點有乙個顏色,m 個詢問,每次詢問乙個子矩陣內,每種顏色出現次數的平方和。r,c l...

二維陣列與二維指標

1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...

二維指標和二維陣列

二維指標和二維陣列有三種形式 1,type ptr 2,type ptr或者type prt 3,type prt 三種形式意思相近,也有區別。首先三種形式都能表示二維的資料結構。1,type ptr 表示乙個指向指標的指標 但是在一開始宣告的時候 type ptr ptr到底指向幾個指標是不知道的...