Codeforces Round #851 (Div. 2) 题解
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_{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) 题解的更多相关文章
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #525 (Div. 2)题解
Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
- Codeforces Round #160 (Div. 1) 题解【ABCD】
Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...
- 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 题解 直接 ...
- Codeforces Round #271 (Div. 2)题解【ABCDEF】
Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...
随机推荐
- 修改U盘图标
效果如下 方法如下 首先,您需要准备一张您想要设置的图标,它应该是一个512 x 512像素大小的PNG格式图片,其他的也无所谓建议512x512 将U盘插入电脑.确保它已被正确识别并显示在文件资源管 ...
- P7031 [NWRRC2016] Anniversary Cake
题目简述 有一块 \(n \times m\) 的长方形蛋糕.蛋糕上有两个蜡烛,分别用 \((x_1,y_1)\) 和 \((x_2,y_2)\) 表示.现在有一把刀要把蛋糕切成两半,请问切入的终点和 ...
- SpringBoot分布式任务中间件开发 附视频讲解 (手把手教你开发和使用中间件)
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 分布式任务DcsSchedule中间件,Github地址:https://github.com ...
- Hadoop3 No FileSystem for scheme "hdfs"
Hadoop3 No FileSystem for scheme "hdfs" 异常信息: org.apache.hadoop.fs.UnsupportedFileSystemEx ...
- Softmax偏导及BP过程的推导
Softmax求导 其实BP过程在pytorch中可以自动进行,这里进行推导只是强迫症 A Apart证明softmax求导和softmax的BP过程 本来像手打公式的,想想还是算了,引用部分给出la ...
- ElasticSearch7.3学习(三)----采用restful风格 批量(bulk)增删改
Bulk 操作是将文档的增删改查一些列操作,通过一次请求全都做完.目的是减少网络传输次数. 语法: POST /_bulk {"action": {"metadata&q ...
- 【幻兽帕鲁】专用服务器攻略来啦!一键部署,5s开服
本文分享自华为云社区<全网最易用.最实用.最好用的[幻兽帕鲁]专用服务器攻略来啦!一键部署,5s开服!>,作者: 云容器大未来. 华为云隆重推出"帕鲁服务器-云耀云容器版&quo ...
- Excel-批量填充数字
1.一般情况下,都是使用鼠标左右键拖动来实现数据的填充的 2.但是填充1200列,下拉拖动就非常麻烦,可以首先定位到A200. 在屏幕左侧中央处找到剪切板下方的"A1"字样,鼠标单 ...
- Linux Shell 字符串截取方法
Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 代码如下: echo ${va ...
- Hive的基本概念
一.Hive基本概念 1.什么是Hive? hive是基于Hadoop的一个数据仓库工具,用来进行数据提取.转化.加载.可以存储.查询和分析存储在Hadoop中的大规模数据. hive数据仓库工具能将 ...