Codeforces Round #851 (Div. 2) 题解

A. One and Two

取 \(\log_2\),变成加号,前缀和枚举 \(s[i]=\dfrac{s[n]}{2}\)。

B. Sum of Two Numbers

对于每一位,如果是偶数则平均分,如果是奇数则分给当前数字和小的数多 \(1\)。

C. Matching Numbers

随便推个构造即可,给个参考。

void solve(){
int n;
cin>>n;
if(n%2==0){
cout<<"NO"<<endl;
return;
}
cout<<"YES"<<endl;
n*=2;
cout<<"1 "<<n<<endl;
for(int i=2,tmp=n-2;i<=(n+2)/4;i++,tmp-=2)
cout<<i<<" "<<tmp<<endl;
for(int i=(n+2)/4+1,tmp=n-1;i<=n/2;i++,tmp-=2)
cout<<i<<" "<<tmp<<endl;
return;
}

D. Moving Dots

考虑所求对于一个状态,必然是两个点“双向奔赴”的时候才有贡献。枚举这相邻的两个点 \(x,y\),然后发现 \([x-len,y+len-1]\) 这一范围内其他数取不了。使用 lower_bound 随便求就好了。

时间复杂度 \(O(n^2\log n)\)。

E. Sum Over Zero

转移为前缀和,写出 \(dp\) 状态为:

\[f_i=\max(f_{i-1},\max_{j<i,s_j\leq s_i} f_{j-1}+(i-j))
\]

考虑把 \(f_{j-1}-j\) 试做一个整体,那么相当于维护这玩意最小值。

树状数组即可。

#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
using namespace std;
#define ll long long
#define MP make_pair
inline ll read(){
ll re=0;char ch=getchar();
while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') re=10*re+ch-'0',ch=getchar();
return re;
}
int n;
namespace sugt{
int mx[200005];
void build(){
for(int i=1;i<=n;i++) mx[i]=-1e9;
}
int lowbit(int x){
return x&(-x);
}
void ins(int x,int y){
while(x<=n){
mx[x]=max(mx[x],y);
x+=lowbit(x);
}
return;
}
int query(int x){
int res=-1e9;
while(x){
res=max(res,mx[x]);
x-=lowbit(x);
}
return res;
}
}
ll s[200005],t[200005];
int f[200005];
map<ll,int> M;int tot=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i];
s[i]+=s[i-1];
t[i]=s[i];
}
sort(t,t+n+1);
for(int i=0;i<=n;i++)
if(!M[t[i]]) M[t[i]]=++tot;
for(int i=0;i<=n;i++)
s[i]=M[s[i]];
sugt::build();
sugt::ins(s[0],0);
for(int i=1;i<=n;i++){
f[i]=max(f[i-1],sugt::query(s[i])+i);
sugt::ins(s[i],f[i-1]-i);
}
cout<<f[n];
return 0;
}

F. XOR, Tree, and Queries

引理: 假设 \(w(u,v)\) 为 \(u,v\) 路径上所有边权异或,则 \(w(u,v)=w(1,u)\ \text{xor}\ w(1,v)\)。

本题相当于给 \(w(1,u)\) 赋权。\(w(1,u)\) 有贡献当且仅当 \(d(u)\) 为奇数。

对于每个 \((u,v,w)\) 连边,每个连通块选代表点,代表点确定整个块确定。

拆位枚举即可。

Codeforces Round #851 (Div. 2) 题解的更多相关文章

  1. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  2. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  3. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...

  4. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

  5. Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F

    Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...

  6. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

  7. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

  8. Codeforces Round #160 (Div. 1) 题解【ABCD】

    Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...

  9. Codeforces Round #383 (Div. 2) 题解【ABCDE】

    Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...

  10. Codeforces Round #271 (Div. 2)题解【ABCDEF】

    Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...

随机推荐

  1. Leetcode 42题 接雨水(Trapping Rain Water) Java语言求解

    题目链接 https://leetcode-cn.com/problems/trapping-rain-water/ 题目内容 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱 ...

  2. 同时配置github和gitee秘钥

    1.设置用户名和邮箱 git config --global --list 查看全局配置信息 git config --global --list 删除配置:必须删除该设置 git config -- ...

  3. 【栈和队列】纯C实现栈和队列以及其基本操作-宝藏级别数据结构教程【保姆级别详细教学】

    [栈和队列]栈和队列的C语言实现-宝藏级别数据结构教程-超详细的注释和解释 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 看完之后别忘记 ...

  4. 体验 ABP 的功能和服务

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. ABP是一个全栈开发框架,它在企业解决方案的各个方面都有许多构建模块.在前面三章中 ...

  5. Linux C/C++ 获取进程号、线程号和设置线程名

    1 前言 在Linux开发过程中,设计多线程开发时可以将进程和线程的 id 打印出来,方便开发调试和后期查问题使用,同时也包括设置线程名. 2 函数及头文件 2.1 进程ID #include < ...

  6. 《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(下)

    第 3 章 ASP.NET Core 核心特性 3.5 配置 要访问配置,需要使用 ConfigurationBinder 类,它实现了 IConfigurationBuilder 接口,该接口包括两 ...

  7. Flink CDC写入数据到kafka几种格式

    Flink CDC写入kafka几种常见的数据格式,其中包括upsert-kafka写入后正常的json格式,debezium-json格式以及changelog-json格式. upsert-kaf ...

  8. 【译】.NET 8 网络改进(三)

    原文 | Máňa,Natalia Kondratyeva 翻译 | 郑子铭 简化的 SocketsHttpHandler 配置 .NET 8 添加了更方便.更流畅的方式来使用 SocketsHttp ...

  9. ABC 332

    ABCDF 都赛时做出来了. E \(\displaystyle\dfrac{1}{D}\sum_{i=1}^D (x_i-\overline{x})^2=\dfrac{1}{D}(\sum_{i=1 ...

  10. IPFS 添加和管理文件

    IPFS的文件有不同的模式 默认模式 默认模式下, 文件会被解析并存入blocks, 同时文件的结构被存入filestore, 因为IPFS是按内容寻址的文件系统, 在添加时最外层的目录名或文件名信息 ...