#include<iostream>#include<algorithm>#include<vector>#include<math.h>#include<set>#include<string>#defineintlonglongusingnamespace std;int a[300010];intgcd(int a,int b){return b ?gcd(b, a % b): a;}intlcm(int a,int b){return a /gcd(a, b)* b;}voidcheck(){int n; cin >> n;
vector<int>v(n);for(int i =0; i < n; i++)cin >> v[i];sort(v.begin(), v.end());int res =0;int l =0, r = n -1;while(l < r){
res +=(v[r--]- v[l++]);}
cout << res << endl;}signedmain(){int t; cin >> t;while(t--){check();}}
B - Long Long
#include<iostream>#include<algorithm>#include<vector>#include<math.h>#include<set>#include<string>#include<stdint.h>#defineintint64_tusingnamespace std;voidcheck(){int n; cin >> n;int sum =0;int res =0;bool st =false;for(int i =0; i < n; i++){int a; cin >> a;if(a >0){
sum += a;if(st){
st =false; res++;}}elseif(a<0){
st =true;
sum -= a;}}if(st)res++;
cout << sum <<" "<< res << endl;}signedmain(){int t; cin >> t;while(t--){check();}}
C - Sum in Binary Tree
#include<iostream>#include<algorithm>#include<vector>#include<math.h>#include<set>#include<string>#include<stdint.h>#defineintint64_tusingnamespace std;voidcheck(){int n; cin >> n;int sum =0;while(n){
sum += n;
n /=2;}
cout << sum << endl;}signedmain(){int t; cin >> t;while(t--){check();}}
#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<math.h>#include<set>#include<string>#include<stdint.h>#defineintlonglongusingnamespace std;constint N =4e5+10;int h[N], ne[N], e[N], idx;
vector<int>sz(N,0);voidadd(int a,int b){
e[idx]= b;
ne[idx]= h[a];
h[a]= idx++;}intdfs(int a,int fa){bool f=false;int res =0;for(int i = h[a]; i !=-1; i = ne[i]){int j = e[i];if(j==fa)continue;
f=true;
res +=dfs(j,a);}if(!f)return sz[a]=1;return sz[a]=res;}voidcheck(){int n; cin >> n;memset(h,-1,sizeof h); idx =0;for(int i=0;i<=n;i++) sz[i]=0;for(int i =0; i < n-1; i++){int a, b; cin >> a >> b;add(b,a);add(a, b);}int q; cin >> q;int res;dfs(1,-1);while(q--){int a, b; cin >> a>>b;
cout << sz[a]*sz[b]<< endl;}}signedmain(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);int t; cin >> t;while(t--){check();}}
E - Tracking Segments
这题的意思就是找到 第一个能出现美丽子区间,所以直接二分,然后找前缀和 区间1>0的个数就行
#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<math.h>#include<set>#include<string>#include<stdint.h>#defineintlonglongusingnamespace std;constint N =1e5+10;int r[N], l[N];int s[N];int a[N];int arr[N];int n, m;boolfunc(int x){for(int i =1; i <= n; i++){
a[i]=0; arr[i]=0;}for(int i =1; i <= x; i++)a[s[i]]=1;for(int i =1; i <= n; i++)arr[i]= arr[i -1]+ a[i];for(int i=1;i<=m;i++){int a = l[i], b = r[i];int len = b-a +1;if((arr[b]- arr[a -1])*2> len)returntrue;}returnfalse;}voidcheck(){
cin >> n >> m;for(int i =1; i <= m; i++) cin >> l[i]>> r[i];int q; cin >> q;for(int i =1; i <= q; i++)cin >> s[i];int L =1, R = q;while(L < R){int mid = L + R >>1;if(func(mid))R = mid;else L = mid +1;}if(func(L)){
cout << L << endl;}else cout <<-1<< endl;}signedmain(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);int t; cin >> t;while(t--){check();}}