T1 yuuustu:

可以对两边取对数,然后就转化为两个double的比较,时间复杂度$O(n)$

然后我就用神奇0.4骗分水过

 #include<bits/stdc++.h>
using namespace std;
const int N=1e6+;
struct BigInt{
int a[];
BigInt(){memset(a,,sizeof(a));a[]=a[]=;}
BigInt friend operator * (BigInt x,int y){
int len=x.a[],las=;
for(register int i=;i<=len;++i){
x.a[i]=x.a[i]*y+las;
las=x.a[i]/;
x.a[i]%=;
if(i==len&&las) ++len;
}
return x.a[]=len,x;
}
void print(){
for(int i=a[];i>=;--i) cout<<a[i];
}
};
inline bool chk(BigInt a,BigInt b){
for(int i=;i<=a.a[];++i) if(a.a[i]!=b.a[i]) return ;
return ;
}
inline bool cmp(BigInt a,BigInt b){//x^y y!
if(a.a[]==b.a[]) if(chk(a,b)) return ;
if(a.a[]^b.a[]) return a.a[]<b.a[];
else{
for(register int i=a.a[];i>=;--i){
if(a.a[i]==b.a[i]) continue;
if(a.a[i]>b.a[i]) return ;
else if(a.a[i]<b.a[i]) return ;
}
}
}
void work_1(int x,int y){
if(x>y*0.4) puts("No");
else puts("Yes");
}
int main(){
freopen("yuuutsu.in","r",stdin);
freopen("yuuutsu.out","w",stdout);
int T;
scanf("%d",&T);register int x,y;
while(T--){
scanf("%d%d",&x,&y);
if(x>||y>){work_1(x,y);continue;}
BigInt Fir,Sec;
Fir.a[]=Fir.a[]=;
Sec.a[]=Sec.a[]=;
for(register int i=;i<=y;++i) Fir=Fir*x;
for(register int i=;i<=y;++i) Sec=Sec*i;
//Fir.print();puts("");Sec.print();
if(cmp(Fir,Sec)) puts("Yes");
else puts("No");
}
fclose(stdin);
fclose(stdout);
return ;
}

yuuutsu

T2 august:

先考虑暴力,我们一个一个考虑每个位置,暴力每个位置置为零,当到最后k个时,看一下是否都为零,如果是Yes,否则No。

考虑优化这个过程因为是个区间修改,所以考虑差分,我们维护一个差分数组,发现只有在模k相等的位置才会互相影响,所以维护一个sum数组,含义为模k为i的下标的差分数组之和,这样只要看他是否全为0即可。每次修改只需维护一个桶,每次修改两个位置就好。

 #include<bits/stdc++.h>
using namespace std;
const int N=2e6+;
int a[N],tong[N];
int main(){
freopen("august.in","r",stdin);
freopen("august.out","w",stdout);
int n,k,q,cnt=;
scanf("%d%d%d",&n,&k,&q);
for(int i=;i<=n;++i) scanf("%d",&a[i]);
for(int i=;i<=n+;++i) tong[i%k]+=(a[i]-a[i-]);
for(int i=;i<k;++i) if(tong[i]) cnt++;
if(cnt) puts("No");
else puts("Yes");
for(int i=;i<=q;++i){
int pos,w;
scanf("%d%d",&pos,&w);
if(tong[pos%k]){
tong[pos%k]+=w;
if(!tong[pos%k]) cnt--;
}
else{
tong[pos%k]+=w;
if(tong[pos%k]) cnt++;
}
++pos,w*=-;
if(tong[pos%k]){
tong[pos%k]+=w;
if(!tong[pos%k]) cnt--;
}
else{
tong[pos%k]+=w;
if(tong[pos%k]) cnt++;
}
if(cnt) puts("No");
else puts("Yes");
}
}

august

T3 sagittarius:

考场上一直想如何去掉非LCA的祖先的贡献,没有想出来,看了题解后发现是非常巧妙的差分处理,即我们设出一个新权值$wt[x]=val[x]-val[fa[x]]$,这样就避免了重复贡献,再用新权值乘以他的子树中所有连续区间即可,发现这个东西暴力统计是布星的,所以我们考虑用线段树合并维护每一个区间(这里所说的区间是子树)从左端点开始的最长连续区间,从右端点开始的最长连续区间和区间内的连续子区间数,则$sn[x]=sn[ls[x]]+sn[rs[x]]+rm[ls[x]]*lm[rs[x]]$,$lm$和$rm$的维护分类讨论即可。

 #include<bits/stdc++.h>
using namespace std;
const int N=2e5+,M=N*;
#define int long long
int first[N],nex[N<<],to[N<<],tot;
int fa[N],d[N],val[N],rk[N],ans,n,a[N],wt[N];
int root[M],lm[M],rm[M],sn[M],ls[M],rs[M];
void add(int a,int b){
to[++tot]=b,nex[tot]=first[a],first[a]=tot;
}
void update(int p,int l,int r){ int mid=l+r>>;
if(lm[ls[p]]==mid-l+) lm[p]=lm[ls[p]]+lm[rs[p]];
else lm[p]=lm[ls[p]];
if(rm[rs[p]]==r-mid) rm[p]=rm[rs[p]]+rm[ls[p]];
else rm[p]=rm[rs[p]];
sn[p]=sn[ls[p]]+sn[rs[p]]+lm[rs[p]]*rm[ls[p]];
}
int merge(int x,int y,int l,int r){
if(!x||!y) return x|y;
int mid=(l+r)>>;
ls[x]=merge(ls[x],ls[y],l,mid);
rs[x]=merge(rs[x],rs[y],mid+,r);
update(x,l,r);
return x;
}
int cnt=;
void insert(int &x,int l,int r,int pos){
if(!x) x=++cnt;
if(l==r) return lm[x]=,rm[x]=,sn[x]=,void();
int mid=(l+r)>>;
if(pos<=mid) insert(ls[x],l,mid,pos);
else insert(rs[x],mid+,r,pos);
update(x,l,r);
}
void dfs(int x){
insert(root[x],,n,rk[x]);
wt[x]=val[x]-val[fa[x]];
for(int i=first[x];i;i=nex[i]){
int y=to[i];
if(y==fa[x]) continue;
dfs(y);
root[x]=merge(root[x],root[y],,n);
}
ans+=wt[x]*sn[root[x]];
//cout<<"x=="/*<<x<<" ans=="*/<<sn[root[x]]<<endl;
}
signed main(){
freopen("sagittarius.in","r",stdin);
freopen("sagittarius.out","w",stdout);
scanf("%lld",&n);
for(int i=;i<=n;++i) {
scanf("%lld",&fa[i]);
add(fa[i],i);
add(i,fa[i]);
}
//for(int i=1;i<=n;++i) cout<<fa[i]<<" ";cout<<endl;
for(int i=;i<=n;++i) scanf("%lld",&a[i]),rk[a[i]]=i;
//for(int i=1;i<=n;++i) cout<<rk[i]<<" ";cout<<endl;
for(int i=;i<=n;++i) scanf("%lld",&val[i]);
dfs();
printf("%lld\n",ans);
}

sagittarius

CSP-S 模拟测试94题解的更多相关文章

  1. [CSP-S模拟测试94]题解

    A.凉宫春日的忧郁 高精硬上似乎跑不过,其实可以都取个$log$.那么只需要比较$y\times log ^x$和$\sum \limits _{i=1}^y log^i$就好了. #include& ...

  2. csp-s模拟测试94

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

  3. CSP-S模拟测试 88 题解

    T1 queue: 考场写出dp柿子后觉得很斜率优化,然后因为理解错了题觉得斜率优化完全不可做,只打了暴力. 实际上他是可以乱序的,所以直接sort,正确性比较显然,贪心可证,然后就是个sb斜率优化d ...

  4. CSP-S 模拟测试92 题解

    话说我怎么觉得我没咕多长时间啊,怎么就又落了20多场题解啊 T1 array: 根据题意不难列出二元一次方程,于是可以用exgcd求解,然而还有一个限制条件就是$abs(x)+abs(y)$最小,这好 ...

  5. CSP-S 模拟测试57题解

    人生第一次A,B层一块考rank2,虽然说分差没几分,但还是值得纪念. 题解: T1 天空龙: 大神题,因为我从不写快读也没有写考场注释的习惯,所以不会做,全hzoi就kx会做,kx真大神级人物. T ...

  6. CSP-S 模拟测试 51 题解

    考试过程: 惯例先看一遍三道题,T1 一开始反应要求割点,但是这是有向图,肯定不能求割点,康了一下数据范围,有40%是树的,还不错,决定待会在打. 看T2 字符串题,完了我字符串最弱了,肯定只能打暴力 ...

  7. CSP-S 模拟测试 45 题解

    由于咕掉的题解太多了,所以只能趁改完不动题的时间,来补补坑qwq,还是太弱了. 考试过程: 到新机房的第一次考试,貌似海星? 第一题一开始就觉得是个贪心,但以为所有小怪兽都要打完,所以想复杂了,但后来 ...

  8. [CSP-S模拟测试97]题解

    A.小盆友的游戏 感觉题解解释的很牵强啊……还是打表找规律比较靠谱 对于每个人,它构造了一个期望函数$f(x)$,设它的跟班个数为$cnt[x]$,那么令$f(x)=2^{cnt[x]}-1$(??鬼 ...

  9. [CSP-S模拟测试96]题解

    以后不能再借没改完题的理由不写题解了…… A.求和 求$\sum \sum i+j-1$ 柿子就不化了吧……这年头pj都不考这么弱智的公式化简了…… 坑点1:模数不定,可能没有2的逆元,那么只要先把乘 ...

随机推荐

  1. QMap里面的值任然是一个QMap,在做循环插入的时候需要记得清空。

    这个问题是我以前的一个问题,当时由于有其他的事情去处理就忘记了,前段时间我的项目要进行集成测试了,为了避免这个缺陷,只能再把这个问题想起来了,再进行解决.有很多问题你觉得不应该发生,其实很多时候都是逻 ...

  2. (一)Activiti简介

    一.概念 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构 ...

  3. B+Tree的基本介绍

    概念 特点 B-Tree有许多变种,其中最常见的是B+Tree,例如MySQL就普遍使用B+Tree实现其索引结构. 与B-Tree相比,B+Tree有以下不同点: 每个节点的指针上限为2d而不是2d ...

  4. 图像识别领域的一些code

    图像识别领域的一些code 转自:http://blog.163.com/pz124578@126/blog/static/23522694201343110495537/ ps:里面的一些方法都是目 ...

  5. XXX银行人事管理系统-数据库设计

    1. 用户.权限.角色关系用户基本信息 userinfo [人员表]权限表actions[权限表]员工类型表usertype [管理组表]权限映射表actionmapping [权限映射表]权限分栏表 ...

  6. JQuery攻略读书笔记---第2章 数组

      2 数组2.8 创建对象数组循环数组2.9 数组排序 2 数组 2.8 创建对象数组 //数组化对象 var student =[ { "role":101, "na ...

  7. [转载]Linux 命令详解:./configure、make、make install 命令

    [转载]Linux 命令详解:./configure.make.make install 命令 来源:https://www.cnblogs.com/tinywan/p/7230039.html 这些 ...

  8. Element-ui-Basic

    一.Layout 布局 1.基础布局 <el-row> <el-col :span="24"><div class="grid-conten ...

  9. 【小知识点】解决Chrome动画”卡顿”的办法

    为动画DOM元素添加CSS3样式-webkit-transform:transition3d(0,0,0)或-webkit-transform:translateZ(0);这两个属性都会开启GPU硬件 ...

  10. 为什么JAVA线程中没有Running状态?

    面试官问:为什么 Java 线程没有 Running 状态?我懵了 —— 转  芋道源码 什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如 ...