@[TOC](Codeforces Round 882 (Div. 2)(视频讲解A——D))
讲解在B站:Codeforces Round 882 (Div. 2)(视频讲解A——D)
A The Man who became a God
#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 1e5 + 10;
bool cmp(int x, int y)
{
return x > y;
}
void solve()
{
int n, k;
cin >> n >> k;
vector<int>a(n);
for(int i = 0 ; i < n; i ++)
cin >> a[i];
vector<int>b(n - 1);
int sum = 0;
for(int i = 0; i < n - 1; i ++)
{
b[i] = abs(a[i] - a[i + 1]);
sum += b[i];
}
sort(b.begin(), b.end(), cmp);
for(int i = 0; i < k - 1; i ++)
{
sum -= b[i];
}
cout << sum << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--)
solve();
}
B Hamon Odyssey
#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 1e5 + 10;
void solve()
{
int n;
cin >> n;
vector<int>a(n);
for(int i = 0; i < n; i ++)
cin >> a[i];
int sum = a[0], ans = 0;
for(int i = 0; i < n; i ++)
{
sum &= a[i];
if(sum == 0)
{
sum = a[i + 1];
ans ++;
}
}
if(ans == 0)
{
cout << 1 << endl;
}
else
{
cout << ans << endl;
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--)
solve();
}
C Vampiric Powers, anyone?
#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 1 << 8 + 10;
int cnt[N];
void solve()
{
memset(cnt, 0, sizeof cnt);
int n;
cin >> n;
vector<int>a(n);
for(int i = 0; i < n; i ++)
cin >> a[i];
cnt[0] = 1;
int tmp = 0;
int ans = 0;
for(int i = 0; i < n; i ++)
{
tmp ^= a[i];
for(int j = 0; j < 256; j ++)
{
if(cnt[j])
{
ans = max(ans, j ^ tmp);
}
}
cnt[tmp] = 1;
}
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--)
solve();
}
D Professor Higashikata
#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 3e5 + 10;
int p[N], tr[N], f[N];
int n, m, q;
int find(int x)
{
if(x != p[x])
p[x] = find(p[x]);
return p[x];
}
int lowbit(int x)
{
return x & (-x);
}
void add(int pos, int x)
{
for(int i = pos; i <= n; i+= lowbit(i))
{
tr[i] += x;
}
}
int query(int pos)
{
int res = 0;
for(int i = pos; i; i -= lowbit(i))
res += tr[i];
return res;
}
void solve()
{
cin >> n >> m >> q;
string s;
cin >> s;
s = " " + s;
int cnt = count(s.begin(),s.end(),'1');
for(int i = 1; i <= n + 1; i ++)
{
p[i] = i;
}
int tot = 0;
for(int i = 0; i < m; i ++)
{
int l, r;
cin >> l >> r;
for(int j = find(l); j <= r; j = find(j))
{
p[j] = j + 1;
f[j] = ++tot;
if(s[j] == '1')
{
add(f[j], 1);
}
}
}
while(q--)
{
int x;
cin >> x;
if(f[x])
{
if(s[x] == '1')
{
s[x] = '0';
cnt --;
add(f[x], -1);
}
else
{
s[x] = '1';
cnt ++;
add(f[x], 1);
}
}
else
{
if(s[x] == '1')
{
s[x] = '0';
cnt --;
}
else
{
s[x] = '1';
cnt++;
}
}
if(cnt >= tot)
{
cout << tot - query(tot) << endl;
}
else
{
cout << cnt - query(cnt) << endl;
}
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
}