思路:
從上往下列舉上邊界,從下往上列舉下邊界。
考慮已經統計出上下邊界為列舉的包含至少k 個點的矩形數,當下邊界往上移動時,可能會刪除某些點。
用按橫座標排序的有序表維護當前上下邊界間的點,只有刪除點的前k 個點和後k個點會影響答案,其它矩形區域依然可行。
這樣每次只需要從有序表中刪除乙個點並統計答案,使用鍊錶即可。
複雜度o( n^2*k )。
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int n = 4000;
int r, c, n, k, idc;
int nxt[n], pre[n], val[n], id[n];
int pointx[n], finded[n], pointy[n];
long
long ans, sum;
vector
ve[n];
struct aaaa[n];
bool cmp(int x, int y)
void del(int t)
}int main()
for (int j=1; j<=idc; j++) id[j] = j;
sort(id+1, id+idc+1, cmp);//x為第一關鍵字,y為第二關鍵字排序
for (int j=1; j//
nxt[id[j]] = id[j+1], pre[id[j+1]] = id[j];
nxt[id[idc]] = id[idc];
pre[id[1]] = id[1];//建立鍊錶維護前驅後繼
for (int j=1; j<=idc; j++)
for (int j=c; j>=i; j--)
}cout
<< ans << endl;
return
0;}
關於鍊錶(上)
常見的三種快取淘汰策略 先進先出策略fifo,最少使用策略lfu,最近最少使用策略lru。1.陣列與鍊錶的區別 先從底層的儲存結構來看 陣列需要的是一組連續的記憶體空間開儲存,而鍊錶不需要,鍊錶通過指標將一組零散的記憶體空間串聯起來使用。陣列使用的是連續的記憶體空間,所以可以借用cpu的快取機制,預...
wince裝置上獲取sd卡的id號
最近工作上的乙個小需求,獲得sd卡上的需求號 typedef struct storage identification storage identification,pstorage identification pstorage identification pstoreinfo unsigne...
資料結構 鍊錶 上
本來說要放假認認真真的學習演算法和計算機基礎,但是看到安卓華麗麗的介面還是義無反顧的奔入了android入門大軍中 主要是懶的看演算法 不過在android學習中發現想要成為乙個合格的開發者 掙更多的錢 光是會呼叫函式是遠遠不夠的,還是需要有乙個深厚的計算機基礎。所以決定沉下心來認真學習計算機基礎。...