2018多校聯合訓練2

2021-08-21 18:46:20 字數 2818 閱讀 6549

打的慘不忍睹,就過了3題

1004:水題,直接輸出yes就過了, solved by lyy

#include using namespace std;

#define ll long long

int n;

int main()

return 0;

}

1010:逆序對*min(x,y) ,隊友一開始wa了4發,給了他模板都不肯抄,偷懶隨便上網找了兩個逆序對的模板恰巧都是錯的,gg  finally solved by lyy

#include using namespace std;

#define ll long long

ll cnt;

int n;

int a[500005],t[500005];

int x,y;

void merge_sort(int *a,int x,int y,int *t)

" class="mathcode" src=""/>,維護區間最小值,每次區間減一,如果為0,就需要進製,對應第二個線段樹更新;第二個存的是答案,最終輸出答案即可,一開始以為會炸,在極端情況下有可能到o(n^2),但是直接ac了

#include using namespace std;

#define ll long long

#define maxn 100005

int b[100005];

int n,m;

namespace lyy

//build函式建樹

void build(int l,int r,int rt)

int m=(l+r)>>1;

//左右遞迴

build(l,m,rt<<1);

build(m+1,r,rt<<1|1);

//更新資訊

pushup(rt);

} void update(int l,int c,int l,int r,int rt)

int m=(l+r)>>1;

//根據條件判斷往左子樹呼叫還是往右

if (l<=m) update(l,c,l,m,rt<<1);

else update(l,c,m+1,r,rt<<1|1);

pushup(rt);//子節點更新了,所以本節點也需要更新資訊

} void pushdown(int rt,int ln,int rn)

}void update(int l,int r,int c,int l,int r,int rt)

int m=(l+r)>>1;

pushdown(rt,m-l+1,r-m);//下推標記

//這裡判斷左右子樹跟[l,r]有無交集,有交集才遞迴

if (l<=m) update(l,r,c,l,m,rt<<1);

if (r>m) update(l,r,c,m+1,r,rt<<1|1);

pushup(rt);//更新本節點資訊

}ll query(int l,int r,int l,int r,int rt)

int m=(l+r)>>1;

//下推標記,否則sum可能不正確

pushdown(rt,m-l+1,r-m);

//累計答案

ll ans=0;

if(l <= m) ans+=query(l,r,l,m,rt<<1);

if(r > m) ans+=query(l,r,m+1,r,rt<<1|1);

return ans;

}}

int sum[maxn<<2],add[maxn<<2];//sum求和,add為懶惰標記

int a[maxn];//存原陣列資料下標[1,n]

//pushup函式更新節點資訊 ,這裡是求和

void pushup(int rt)

//build函式建樹

void build(int l,int r,int rt)

int m=(l+r)>>1;

build(l,m,rt<<1);

build(m+1,r,rt<<1|1);

pushup(rt);

} void pushdown(int rt) }

void go(int l,int r,int rt)

void update(int l,int r,int l,int r,int rt)

else

return;

} int m=(l+r)>>1;

pushdown(rt);

if (l<=m) update(l,r,l,m,rt<<1);

if (r>m) update(l,r,m+1,r,rt<<1|1);

pushup(rt);

}int query(int l,int r,int l,int r,int rt)

int m=(l+r)>>1;

pushdown(rt);

int ans=0;

if(l <= m) ans+=query(l,r,l,m,rt<<1);

if(r > m) ans+=query(l,r,m+1,r,rt<<1|1);

return ans;

}int main()

build(1,n,1);

memset(add,0,sizeof(add));

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

}return 0;

}

2018多校聯合訓練4

過了6題,第一次進入前100名 1012 直接從1走到n solved by wyq include includeint a 100005 int reabs int x int main return 0 1004 和出題人心有靈犀2333 solved by lyy include using...

2018 多校聯合訓練 7

problem a 比賽的時候沒主要搞這個題 因為不怎麼會 其實就是類似做dij的乙個過程,記錄3個值 當前點編號,到當前點的代價,當前點的那條邊的顏色。然後遍歷一遍就可以了。problem b 本來比賽的時候想到不同的字母之間的差值肯定不能作為迴圈節。然後我就上了fft,因為做過差不多的題。但是w...

2018 多校聯合訓練 1

problem a 首先解方程 frac frac frac n frac frac frac 1 如果 a,b,c 都必須為正整數,那麼令 a b c 那麼 a 3 所以 2 a 3 a 2 的時候 b 3,c 6,或者 b 4,c 4 顯然前者好像比較垃圾,那麼捨去 a 3 的時候 frac f...