头一次做图巨的模拟题OWO

自从上一次听图巨讲课然后骗了小礼物以后一直对图巨印象挺好的233

T1:

对于XY取对数=Y*log(x)

对于Y!取对数=log(1*2*3*...*Y)=log1+log2+log3+...+logY

因为数字大小不超过1e5,直接累加最后比较就可以了

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int t,x,y;
double a,b;
int main()
{
freopen("yuuutsu.in","r",stdin);
freopen("yuuutsu.out","w",stdout);
scanf("%d",&t);
while(t--){
scanf("%d%d",&x,&y);
a=y*log(x);
b=;
for(int i=;i<=y;i++){
b+=log(i);
}
if(a<=b)printf("Yes\n");
else printf("No\n");
}
return ;
}

T2:

每一次操作会让区间整体加或减->在差分数组上首位加减

列出目标序列的差分数组,可以进行操作让一个位置的数字移动k步,如果有大小相同的数字撞在一起就会消掉,不同的话可以合并。想起星空这道题,不同的是今天的T2只能走k一种步数且差分值并不只代表一种状态

目标是要让所有的值变成0,又想到一道跳斑马线的题……?考虑把位置对于k取模余数不同的数字分开处理。维护位置对于k取模后余数为下标,记录差分值之和的m数组。用树状数组维护当前的m是否都为0。

#include<iostream>
#include<cstdio>
using namespace std;
const int N=2e6+;
int n,k,q,a[N],sum[N],m[N];
long long tree[N];
void add(int x,int y){
for(;x<=k;x+=(x&-x))tree[x]+=y;
}
long long ask(int x){
long long num=;
for(;x;x-=(x&-x))num+=tree[x];
return num;
}
int main()
{
freopen("august.in","r",stdin);
freopen("august.out","w",stdout);
scanf("%d%d%d",&n,&k,&q);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
m[i%k]+=a[i]-a[i-];
}
m[(n+)%k]+=-a[n];
for(int i=;i<k;i++){
add(i+,(m[i]!=));
}
if(!ask(k))printf("Yes\n");
else printf("No\n");
for(int i=,x,pos;i<=q;i++){
scanf("%d%d",&pos,&x);
int pos0=pos%k,pos1=(pos+)%k;
int val=(m[pos0]!=),val1=(m[pos1]!=);
m[pos0]=m[pos0]-a[pos]+a[pos-];
m[pos1]=m[pos1]-a[pos+]+a[pos];
a[pos]+=x;
m[pos0]=m[pos0]+a[pos]-a[pos-];
m[pos1]=m[pos1]+a[pos+]-a[pos];
add(pos0+,(m[pos0]!=)-val);
add(pos1+,(m[pos1]!=)-val1);
if(!ask(k))printf("Yes\n");
else printf("No\n");
}
return ;
}

发现自己对于m是否都为0的处理过于麻烦了…这是何种山路十八弯的脑回路才会想到这种处理…

其实是中途思路锅了,保留了树状数组的写法XD其实直接记一个m不为0的数量,每次m变化的时候进行更新就好了

T3:

将问题转化成,对于树上的一个点,会对多少区间产生贡献。

线段树维护子树中存在哪些位置的点,线段树下标是在a数组中的位置。如果这个点可以对一段区间产生贡献,那么这段区间在线段树种一定是连续的1,中间若存在0则代表这段区间中在更高的地方存在点。在线段树上统计答案,记录线段树每个节点从左端点开始最长的一段1的长度lonl,从右端点开始最长的一段1的长度lonr,以及包含的区间个数val。val=左儿子的val+右儿子的val+左儿子lonr*右儿子lonl(端点在两边的区间数量)。这样计算一定不重不漏,有线段树分治的意味。

维护节点x的线段树的时候,对所有儿子进行线段树合并,再把x点insert进去。注意当前节点线段树root的区间个数要减去节点儿子们的区间个数,才能用来累计答案。

#include<iostream>
#include<cstdio>
using namespace std;
const int N=;
int n,tot,cnt;
int ver[N],Next[N],head[N];
int a[N],b[N],pos[N],T[N],L[N*],R[N*],lonl[N*],lonr[N*];
long long ans,sum[N],val[N*];
void add(int x,int y){
ver[++tot]=y;
Next[tot]=head[x];
head[x]=tot;
}
void update(int p,int l,int r){
int mid=(l+r)/;
if(lonl[L[p]]==mid-l+)lonl[p]=mid-l++lonl[R[p]];
else lonl[p]=lonl[L[p]];
if(lonr[R[p]]==r-mid)lonr[p]=r-mid+lonr[L[p]];
else lonr[p]=lonr[R[p]];
val[p]=val[L[p]]+val[R[p]]+1ll*lonr[L[p]]*lonl[R[p]];
}
void change(int &p,int p0,int l,int r){
if(!p){
p=p0;
return;
}
int mid=(l+r)/;
if(L[p0])change(L[p],L[p0],l,mid);
if(R[p0])change(R[p],R[p0],mid+,r);
update(p,l,r);
}
void ins(int &p,int l,int r,int pos){
if(!p)p=++cnt;
if(l==r){
lonl[p]=lonr[p]=;
val[p]=;
return;
}
int mid=(l+r)/;
if(pos<=mid)ins(L[p],l,mid,pos);
else ins(R[p],mid+,r,pos);
update(p,l,r);
}
void dfs(int x){
for(int i=head[x];i;i=Next[i]){
int y=ver[i];
dfs(y);
sum[x]+=sum[y];
change(T[x],T[y],,n);
}
ins(T[x],,n,pos[x]);
long long num=val[T[x]];
ans+=(num-sum[x])*b[x];
sum[x]=num;
}
int main()
{
freopen("sagittarius.in","r",stdin);
freopen("sagittarius.out","w",stdout);
scanf("%d",&n);
for(int i=,x;i<=n;i++){
scanf("%d",&x);
add(x,i);
// st[i][0]=x;
}
for(int i=;i<=n;i++)scanf("%d",&a[i]),pos[a[i]]=i;
for(int i=;i<=n;i++)scanf("%d",&b[i]),ans+=b[i];
dfs();
printf("%lld\n",ans);
return ; }

2019.10.30 csp-s模拟测试94 反思总结的更多相关文章

  1. csp-s模拟测试94

    csp-s模拟测试94 一场简单题,打爆了.$T1$脑抽分解质因数准备分子分母消,想了半天发现$jb$互质直接上天,果断码了高精滚蛋.$T2$无脑手玩大样例,突然灵光一闪想到映射到前$K$大小的区间, ...

  2. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  3. 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色

    2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...

  4. 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)

    2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...

  5. 2019.8.14 NOIP模拟测试21 反思总结

    模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...

  6. 2019.8.9 NOIP模拟测试15 反思总结

    日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...

  7. 2019.8.1 NOIP模拟测试11 反思总结

    延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...

  8. 2019/10/17 CSP模拟 总结

    T1 补票 Ticket 没什么好说的,不讲了 T2 删数字 Number 很后悔的是其实考场上不仅想出了正解的方程,甚至连优化都想到了,却因为码力不足只打了\(O(n^2)\)暴力,甚至还因为细节挂 ...

  9. 2019.8.10 NOIP模拟测试16 反思总结【基本更新完毕忽视咕咕咕】

    一如既往先放代码,我还没开始改… 改完T1滚过来了,先把T1T2的题解写了[颓博客啊] 今天下午就要走了,没想到还有送行的饯别礼,真是欣喜万分[并没有] 早上刚码完前面的总结,带着不怎么有希望的心情开 ...

随机推荐

  1. VMware Workstation 10 简体中文安装教程

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 分享到 一键分享 QQ ...

  2. while语句结构(for循环)

    while语句结构(for循环) python for 循环可以遍历任何序列的项目,如一个列表或一个字符串 for循环的一般形式 for 条件判断 in 一个序列: 执行语句 else: 执行语句 可 ...

  3. SwiftUI 实现Draggesture效果

    今天闲来无事,使用SwiftUI 实现拖动,并且返回的动态效果.代码不多..... 效果如下: 代码如下: import SwiftUI import Combine class KBDragObje ...

  4. 使用 /proc 文件系统

    /proc 文件系统是一个特殊的软件创建的文件系统, 内核用来输出消息到外界. /proc 下 的每个文件都绑到一个内核函数上, 当文件被读的时候即时产生文件内容. 我们已经见到 一些这样的文件起作用 ...

  5. 判断JS对象是否为空的几种方式

    .将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var b = (JSON.stringify(data) == "{} ...

  6. 在双重for循环内部使用async异步请求axios中遇到的问题

    在methods中的方法 async getPro () { let _this = this let newArr = [] await axios.get(`api/v1/dailyProTbms ...

  7. [转]C# 之泛型详解

    什么是泛型 我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为 ...

  8. MySQL操作表和表记录

    目录 操作表 增 列约束 列类型 删 改 修改表名 增加字段 修改字段 删除字段 查 复制表结构 操作表数据 增 删 改 查 操作表 增 创建表语法 创建一个表,多个字段: create table ...

  9. Django项目:CMDB(服务器硬件资产自动采集系统)--12--08CMDB采集硬件数据日志记录

    #settings.py # ————————01CMDB获取服务器基本信息———————— import os BASEDIR = os.path.dirname(os.path.dirname(o ...

  10. VMware的下载安装

    在学习使用LINNX系统之前,先在自己的电脑上安装一个虚拟机,流行的虚拟机软件有VMware(VMWare ACE).Virtual Box和Virtual PC,它们都能在Windows系统上虚拟出 ...