头一次做图巨的模拟题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. 数据库小技巧:使用distinct去除重复行

    这里有2个表 问题question表 楼层question_floor表 需求:已知某用户的id为uid,实现“我的回复”功能,即查看我回复的所有问题 遇到的问题:如果直接对question表和que ...

  2. QT之QSettings 学习

    1.读写配置文件. 代码如下: //创建配置文件 QSettings iniFile(QCoreApplication::applicationDirPath()+"/test.ini&qu ...

  3. PagedListCore的使用

    关于在Core2.0中PagedListCore实现分页 一.引言 开发中在对大量数据展示的时候,出于对性能的考虑,我们往往是使用分页功能(用户需要那一页我们就返回给他那一页,而不是一次性加载所有的数 ...

  4. java_Properties集合

    package propertiesTest; import java.io.FileReader; import java.io.FileWriter; import java.io.IOExcep ...

  5. 注解@Qualifier@Primary

    在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢 根据注入资源的注解不同实现的方式有一点小小的区别 在Controller中使用 @Auto ...

  6. 关于安装了sqlite对于vs的组件,重启vs后,在外面可以连接sqlite数据库,但是在建立实体模型时没有sqlite数据源的问题

    出自:http://bbs.csdn.net/topics/390917337 兄弟,刚刚在stackoverflow上找到了解决方法了http://stackoverflow.com/questio ...

  7. alias用于设置当前数据表的别名,

    alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等. 示例: $Model = M('User'); $Model->alias('a')->join('__DE ...

  8. &卡特兰数学习笔记

    一.关于卡特兰数 卡特兰数是一种经典的组合数,经常出现在各种计算中,其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 20801 ...

  9. slam课程

    美国宾夕法尼亚大学最近有录制一套 无人机视觉定位导航相关的视频课程,2019年3月份在YouTube上更新完毕,质量非常高,名字叫Robotics,视频课程列表:https://www.youtube ...

  10. BCB怎么调用DLL中的函数

    推荐你看<BCB编写DLL终极手册>这篇文章如下片段:二. 静态调用 DLL使用 $BCB path\Bin\implib.exe 生成 Lib 文件,加入到工程文件中将该文件拷贝到当前目 ...