第一考慮容斥原理。
然後掃瞄線掃過去,用一棵可持久化平衡樹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...