luogu1494 國家集訓隊 小Z的襪子

2022-09-19 04:27:10 字數 809 閱讀 7311

傳送門

直接普通莫隊敲上去。問題在於每只襪子對於答案的貢獻。1只襪子的恭喜是0,2只是1,3只是3……其實就是x的貢獻是\(1+2+3+...+(x-1)\),這裡直接等差數列求和就行了。

最後求出gcd,就可以得到最簡分式

#include #include #include #include #define maxn 50005

struct node g[maxn];

int book[maxn];

int cur[maxn],rec[maxn];

int n,m,size;

long long ans = 0;

long long gcd(long long a,long long b)

inline long long calc(long long x)

inline bool cmp(node a,node b)

inline void work(int x,int u)

int main()

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

size = sqrt(n);

std::sort(g+1,g+1+m,cmp);

std::memset(book,0,sizeof(book));

ans = 0;

int l = g[1].l,r = g[1].r;

for(int i=l;i<=r;++i) work(i,1);

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

return 0;

}

Luogu1501 國家集訓隊 Tree II

題目描述 一棵n個點的樹,每個點的初始權值為1。對於這棵樹有q個操作,每個操作為以下四種操作之一 u v c 將u到v的路徑上的點的權值都加上自然數c u1 v1 u2 v2 將樹中原有的邊 u1,v1 刪除,加入一條新邊 u2,v2 保證操作完之後仍然是一棵樹 u v c 將u到v的路徑上的點的權...

Luogu 1975 國家集訓隊 排隊

luogu 1975 題意 給出乙個長度為n的數列以及m個交換兩個數的操作,問每次操作後逆序對數量 時間,下標和數的大小三維偏序,把交換操作看成是減去兩個數再加上兩個數,套板子就好了 發現這種計數型別的cdq一般有兩種寫法 感覺應該都差不多,但有些題目用兩種方式寫也有一些優劣之分,比如這道題,用第二...

Luogu 2839 國家集訓隊 middle

感覺這題挺好的。首先對於中位數最大有乙個很經典的處理方法就是二分,每次二分乙個陣列中的下標 mid 然後我們把 mid 代回到原來的陣列中檢查,如果乙個數 a geq mid 那麼就把 s 記為 1 否則把 s 記為 1 然後對 s 跑一遍字首和,觀察是否有乙個區間的和不小於 0 讀清楚題意之後發現...