[Codeforces]CF742(Div.2)A-E
CF742(Div.2)
https://codeforces.com/problemset/problem/1567/A ,签到
https://codeforces.com/problemset/problem/1567/B ,首先答案至少是a,也就是至少要有\(0,1,\dots,a-1\)这些异或和,记为\(S\),这种时候一般只要再异或上一个\(S\oplus b\)就行了,\(S\)如果是\(b\)的话还不用异或,以及万一\(S\oplus b\)刚好是\(a\),就会导致mex出问题,这种时候异或两个就行。
https://codeforces.com/problemset/problem/1567/C ,这题好难啊——,注意到进位全部往高位移一位之后,第0位进位给第2位,第1位给第3位,第2位给第4位,嗯就是奇数位单独进位,偶数位单独进位,所以把数字的位置按奇偶拆开成\(a,b\),最后答案就是\((a+1)(b+1)-2\),2是两个都是0的情况。
https://codeforces.com/problemset/problem/1567/D ,算个构造题(?),就是说\(n\)个十进制数之和为\(s\),把他们看成11进制数做加法,使得11进制下的和最大。
首先答案肯定不会超过把\(n\)看成11进制的值,10进制看成11进制麻烦就在于一些原来能进位的地方进不了了,于是为了尽可能避免这个问题,拆数的时候就尽量把\(s\)拆成10的幂次!比如\(123=100+23=100+20+3\)这样,接着如果不够\(n\)个就从低往高的拆,暴力\(O(n^2\log n)\)就能过。
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define endl '\n'
#define mp make_pair
#define pb push_back
#define fi first
#define se second
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<double,int> pdi;
typedef vector<int> vi;
const int N=105;
int T,n,s,cnt;
int a[N],pw10[N];
void solve()
{
sort(a+1,a+cnt+1);
rep(i,1,cnt)rep(j,0,9)if(pw10[j]<a[i]&&a[i]<pw10[j+1])
{
a[++cnt]=pw10[j];
a[i]=a[i]-pw10[j];
return;
}
rep(i,1,cnt)rep(j,1,9)if(a[i]==pw10[j])
{
a[++cnt]=pw10[j-1];
a[i]=a[i]-pw10[j-1];
return;
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
pw10[0]=1;
rep(i,1,9)pw10[i]=pw10[i-1]*10;
cin>>T;
rep(tc,1,T)
{
cin>>s>>n;
cnt=1;a[cnt]=s;
while(cnt<n)solve();
sort(a+1,a+n+1);
rep(i,1,n)cout<<a[i]<<' ';cout<<endl;
}
return 0;
}
https://codeforces.com/problemset/problem/1567/E ,线段树,我维护的方法比较暴力,每个节点存上答案、区间长度、左右端点的值,以及最长non-decreasing的prefix和suffix长度。
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define endl '\n'
#define mp make_pair
#define pb push_back
#define fi first
#define se second
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<double,int> pdi;
typedef vector<int> vi;
const int N=2e5+5;
struct nod
{
ll s;
int len,vl,vr,len_l,len_r;
}tr[N<<2];
int n,q;
int a[N];
#define lson (node<<1)
#define rson (node<<1|1)
ll calc(ll x){return 1ll*x*(x+1)/2;}
nod merge(nod ls,nod rs)
{
nod ret;
ret.vl=ls.vl;ret.len_l=ls.len_l;
ret.vr=rs.vr;ret.len_r=rs.len_r;
ret.len=ls.len+rs.len;
if(ls.vr>rs.vl)ret.s=ls.s+rs.s;
else
{
ret.s=ls.s+rs.s-calc(ls.len_r)-calc(rs.len_l)
+calc(ls.len_r+rs.len_l);
if(ls.len==ls.len_l)
ret.len_l=ls.len_l+rs.len_l;
if(rs.len==rs.len_r)
ret.len_r=rs.len_r+ls.len_r;
}
return ret;
}
void push_up(int node)
{
tr[node]=merge(tr[lson],tr[rson]);
}
void build(int node,int l,int r)
{
if(l==r)
{
tr[node].s=tr[node].len=tr[node].len_l=tr[node].len_r=1;
tr[node].vl=tr[node].vr=a[l];
return;
}
int mid=(l+r)>>1;
build(lson,l,mid);build(rson,mid+1,r);
push_up(node);
}
nod query(int node,int l,int r,int ql,int qr)
{
if(ql<=l&&r<=qr)return tr[node];
int mid=(l+r)>>1;
nod ls,rs;
ls.len=rs.len=-1;
if(mid>=ql)ls=query(lson,l,mid,ql,qr);
if(mid+1<=qr)rs=query(rson,mid+1,r,ql,qr);
if(ls.len==-1)return rs;
else if(rs.len==-1)return ls;
else return merge(ls,rs);
}
void modify(int node,int l,int r,int x,int y)
{
if(l==r)//Here!Not l==x hhh
{
tr[node].vl=tr[node].vr=y;
return;
}
int mid=(l+r)>>1;
if(mid>=x)modify(lson,l,mid,x,y);
else modify(rson,mid+1,r,x,y);
push_up(node);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>q;
rep(i,1,n)cin>>a[i];
build(1,1,n);
rep(i,1,q)
{
int op,x,y;
cin>>op>>x>>y;
if(op==1)modify(1,1,n,x,y);
else cout<<query(1,1,n,x,y).s<<endl;
}
return 0;
}
原文地址:https://www.cnblogs.com/yoshinow2001/p/15250300.html
- 巧用flashback database实现灵活的数据回滚(r5笔记第16天)
- Spring Cache For Redis.
- css重写checkbox样式
- 通过shell脚本同时监控多个数据库负载(r5笔记第14天)
- Java 定时器 Timer 的使用.
- 通过shell脚本来统计段大小(r5笔记第14天)
- Linux下配置MySQL主从复制(r5笔记第13天)
- Final 关键字
- ArrayList 和 LinkedList的执行效率比较
- 关于consistent gets(r5笔记第12天)
- wait/notify 实现多线程交叉备份
- 01.SVN介绍与安装
- 由sqlplus中的一个小细节所做的折腾(r5笔记第11天)
- 浅析多线程的对象锁和Class锁
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- spring 到底注入接口还是实现类?
- 韩松团队新作 | MCUNet | IoT设备+微型机器学习时代已经到来了
- SpringMVC在web.xml中的配置(引入springmvc)
- springmvc使用DELETE|PUT请求
- Mybatis缓存相关的知识
- 「2020最新」Spring最易学习教程—第一个Spring程序
- idea背景图片及简化插件
- 「2020最新」Spring最易学习教程—IOC 以及 整合Struts2
- SpringBoot整合Mybatis增删改查
- JavaWeb之Maven
- Mirages主题帮助文档
- Java作业-租车小系统
- 「2020最新」Spring最易学习教程 3— 代理设计模式 Spring AOP 动态代理原理
- 初入Mybatis:简介及配置
- Java多线程安全问题