2017 山東一輪集訓 Day4 基因

2022-03-31 16:50:16 字數 1214 閱讀 9991

設定 \(\sqrt\) 個關鍵點,維護出關鍵點到每個右端點之間的答案以及pam的左指標,每次暴力向左插入元素即可,為了去重,還需要記錄一下pam上每個節點在每個關鍵點為左端點插入到時候到最左邊出現位置,總複雜度 \(o(n\sqrt)\)。

/*program by mangoyang*/

#pragma gcc optimize("ofast", "inline")

#include#define inf ((int)(1e9))

#define max(a, b) ((a) > (b) ? (a) : (b))

#define min(a, b) ((a) < (b) ? (a) : (b))

typedef long long ll;

using namespace std;

template inline void read(t &x)

const int n = 100005;

char s[n];

namespace pam

inline int newnode(int x)

inline void pushback(int l, int r)

tail = ch[p][c];

if(len[tail] == r - l + 1) head = tail;

}inline void pushfront(int l, int r)

head = ch[p][c];

if(len[head] == r - l + 1) tail = head;

}}int bel[n], pos[700][n], pre[700][n], ans[700][n], ti[n], n, type, q, ans, tim;

int main()

ans[i][j] += ans[i][j-1], pre[i][j] = pam::head;

}

}while(q--)

printf("%d\n", ans); continue;

}int c = bel[l] + 1;

pam::head = pre[c][r], ans = ans[c][r];

for(int i = (c - 1) * s; i >= l; i--)

}printf("%d\n", ans);

}

return 0;

}

費用流 2017 山東一輪集訓 Day4 棋盤

求放k個棋子在n n的棋盤上,最少互相攻擊的棋子對數。能夠攻擊僅當兩旗子在一條直線上,且中間無障礙物。共有q個詢問 不難想到這種棋盤上放棋子的題考得是網路流 積累 按行 縱分別按其對應連通塊編號,s 行 縱 t 但明顯新一行的點互相攻擊的話,隨點數的增加,貢獻是0,1,2,3這樣遞增的。於是我們想到...

2017 山東一輪集訓 Day7 逆序對

題解 滿滿的套路題。首先顯然從大到小列舉 然後每次生成的逆序對是1 i 1 的 這樣做dp是nk的 複雜度太高了 那我們轉化一下問題 變成sigma ai ai 據說是個經典問題。感覺非常奇妙 先容斥一下,也就是說 總的 至少1個條件不滿足 至少2個條件不滿足 那考慮一下如何算有x個條件不滿足 不滿...

2017 山東一輪集訓 Day6 重建

考試的時候以為兩者最短路差值的絕對值為 階梯拋物線 像這樣 可以二分,然而並沒有單峰性。不過騙了70分,混了個rank1,血賺 include.h define gt p1 p2 p2 p1 buf fread buf,1,1000000 stdin p1 p2 eof p1 define pt c...