省選專練ZJOI2012小藍的好友

2021-08-16 06:11:11 字數 1168 閱讀 1634

第一考慮容斥原理。

然後掃瞄線掃過去,用一棵可持久化平衡樹treap維護搞。

陳老師的說的很不錯。

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

inline void read(long long &x)

while(ch>='0'&&ch<='9')

x*=f;

}const long long n=100000+1000;

struct treap

void pushdown(long long p)

if(son[p][1])

delta[p]=0;

} }void update(long long p)

if(y)

} pairsplit(long long p,long long k)

pushdown(p);

pairtemp;

if(size[son[p][0]]+1<=k)

else

} long long merge(long long a,long long b)

if(b==0)

pushdown(a);

pushdown(b);

if(h[a]a[n];

long long q;

/* 引理:容斥原理

正難則反。

求出所有的矩陣數並且減去含0的矩陣數。

所有矩陣數求法:

對於n選取一段:有(n+1)*n/2種選法。

*/ int main()

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

ans=(n+1)*n/2*(m+1)*m/2;

/* 利用掃瞄線求出當前的這個點矩陣可延伸高度。

*/ /* 實際是維護了一棵笛卡爾樹。

對於100%資料隨機。

那麼顯然可以利用座標當做fix來維護treap的時間複雜度。

*/ for(long long i=1;i<=m;i++)

/* 我選用了第一維作為掃瞄的目標.

*/ for(long long i=1,j=1;i<=n;i++)

ans-=a.getans();

} printf("%lld",ans);

}

省選專練ZJOI2012旅遊

stl在開o2後自然是大水題。考點 樹的直徑。第一二次構圖。把每乙個三角塊相鄰的建邊。怎麼建?stl 你都做到這個題了map hash兩個值鐵定會吧。但是zjoi沒有那麼好心,不過你也有70分了。於是這樣 把兩點建邊。排個序。相同的時候連起來。樹的直徑。很多人求複雜了。樹的直徑一遍dfs就可以,不需...

省選專練ZJOI2005午餐

這是個好題 考察dp優化,dp,貪心,01揹包變種。好首先對吃飯時間從大到小排序,因為一隊人打飯時長總和一樣。dp i,j 表示前i個人,第一組用j的時間。放第乙個揹包 dp i j min max dp i 1 j a i w j a i v 放第二個揹包 dp i j min max dp i ...

省選專練SCOI2015小凸想跑步

終於快把scoi練完了。毒瘤題這個題難點不在半平面交,在於推導 其次精度問題 eps 和inf 取值需謹慎。大了會丟精度,小了會炸精度。接著得開long double 於是流輸出。includeusing namespace std define double long double const d...