半小时打完了\(A~D\),想要一发\(F\)冲进前\(100\),结果平衡树常数大\(T\)了。据说\(G\)是矩阵树定。

\(A\)

放代码吧。

A
// code by Dix_
#include<bits/stdc++.h>
#define ll long long inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
} ll x,y,z; int main(){
x = read(),y = read(),z = read();
if(y * z % x != 0)
std::cout<<(ll)y * z / x;
else
std::cout<<(ll)y * z / x - 1<<std::endl;
}

\(B\)

按题意模拟

B
// code by Dix_
#include<bits/stdc++.h>
#define ll long long
#define M 1000000 inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
} ll num[M];
ll n,m; int main(){
n = read(),m = read();
for(int i = 1;i <= n;++i){
ll x = read();
if(num[x] == 0)
num[x] ++ ;
}
for(int i = 1;i <= m;++i){
ll x = read();
num[x] ++ ;
}
for(int i = 1;i <= M;++i)
if(num[i] == 1)
std::cout<<i<<" ";
}

\(C\)

考虑枚举这个最大的公约数,把这个公约数的倍数在小于\(m\)情况下求出第二大的,看是否大于\(n\)

C
// code by Dix_
#include<bits/stdc++.h>
#define ll long long
#define M 1000000 inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
} ll num[M];
ll n,m; bool s(int a){
for(int i = 2;i < sqrt(a);++i)
if(a % i == 0)
return false;
return true;
} int main(){
n = read(),m = read();
for(int i = m;i >= 1;--i){
ll x = m / i * i - i;
ll y = m / i * i;
if(x >= n){
std::cout<<i;
return 0;
}
}
}

\(D\)

考虑第一位有\(p - 1\)种选择,以后每个位根据前面的和的膜,只有\(p-2\)种

D
// code by Dix_
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007 inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
} ll n,p; ll power(ll a,ll b){
ll ans = 1;
while(b){
if(b & 1)ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans;
} int main(){
n = read();
p = read();
p -= 1;
std::cout<<(p * power(p - 1,n - 1)) % mod<<std::endl;
}

\(F\)

考虑改变一个数时,在另外一个序列里找到原数的贡献,和现在这个数的贡献。

并在这个序列中删掉原数,加入新数。

用平衡树操作,只要查询前缀,前缀和,还有删除插入操作

放一下考场代码,被卡常了,找时间再改吧。

F
// code by Dix_
#include<bits/stdc++.h>
#define ll long long
#define M 200005 inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
} ll n,m,q; ll a[M],b[M],suma,sumb; ll ans = 0; struct P{
#define A 2000010 ll ch[A][2],val[A],cv[A],siz[A],cnt,sum[A];
#define l(x) ch[x][0]
#define r(x) ch[x][1]
#define v(x) val[x]
#define c(x) cv[x]
#define s(x) siz[x]
#define sa(x) sum[x] void up(ll x){s(x) = 1 + s(l(x)) + s(r(x)),sa(x) = v(x) + sa(l(x)) + sa(r(x));} ll randoom(){return rand() << 15 | rand();} ll newcode(ll x){s(++cnt) = 1,sa(cnt) = v(cnt) = x,c(cnt) = randoom();return cnt;} void split(ll now,ll k,ll &x,ll &y){
if(!now){x = y = 0;return;}
if(v(now) <= k) x = now,split(r(now),k,r(now),y);
else
y = now,split(l(now),k,x,l(now));
up(now);
} ll merge(ll x,ll y){
if(!x || !y)return x + y;
if(c(x) < c(y)){
r(x) = merge(r(x),y);
up(x);return x;
}
else{
l(y) = merge(x,l(y));
up(y);return y;
}
} ll root,x,y,z,cn; void insert(ll a){
cn ++ ;
split(root,a,x,y);
root = merge(merge(x,newcode(a)),y);
} void del(ll a){
cn -- ;
split(root,a,x,z);
split(x,a - 1,x,y);
y = merge(l(y),r(y));
root = merge(x,merge(y,z));
} ll find(ll a){
split(root,a - 1,x,y);
ll ans = s(x) + 1;
root = merge(x,y);
return ans;
} ll kth(ll now,ll k){
if(k <= s(l(now)))return kth(l(now),k);
else
if(k == s(l(now)) + 1)return now;
else
return kth(r(now),k - s(l(now)) - 1);
} ll pre(ll a){
split(root,a,x,y);
ll ans = s(x);
merge(x,y);
return ans;
} ll nex(ll a){
split(root,a,x,y);
ll ans = v(kth(y,1));
merge(x,y);
return ans;
} ll prev(ll a){
split(root,a,x,y);
ll ans = sa(kth(x,s(x)));
merge(x,y);
return ans;
} }Q,P;//A B ll tob(int x){
ll l = sumb - P.prev(x);
// std::cout<<l<<std::endl;
ll k = P.pre(x) * x;
// std::cout<<k<<std::endl;
return l + k;
}//在b里找贡献。 ll toa(int x){
ll l = suma - Q.prev(x);
ll k = Q.pre(x) * x;
return l + k;
}//在b里找贡献。 int main(){
n = read(),m = read(),q = read();
for(int i = 1;i <= n;++i)
Q.insert(0);
for(int i = 1;i <= m;++i)
P.insert(0);
while(q -- ){
ll t = read(),x = read(),y = read();
if(t == 1){
ans += tob(y) - tob(a[x]);
suma += y - a[x];
Q.del(a[x]),Q.insert(y);
a[x] = y;
}
if(t == 2){
ans += toa(y) - toa(b[x]);
sumb += y - b[x];
P.del(b[x]),P.insert(y);
b[x] = y;
}
std::cout<<ans<<std::endl;
}
}

\(rank 800\)果真还是逊啊。

[JSC2021 A~D + F]的更多相关文章

  1. Mysql_以案例为基准之查询

    查询数据操作

  2. 在 C# 里使用 F# 的 option 变量

    在使用 C# 与 F# 混合编程的时候(通常是使用 C# 实现 GUI,F#负责数据处理),经常会遇到要判断一个 option 是 None 还是 Some.虽然 Option module 里有 i ...

  3. 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型

    前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.

  4. 如果你也会C#,那不妨了解下F#(2):数值运算和流程控制语法

    本文链接:http://www.cnblogs.com/hjklin/p/fs-for-cs-dev-2.html 一些废话 一门语言火不火,与语言本身并没太大关系,主要看语言的推广. 推广得好,用的 ...

  5. 使用F#开发ASP.NET Core应用程序

    .NET Core 里的F# 在.NET Core刚发布时,就已经添加了对F#的支持.但因为当时F#组件还不完整,而一些依赖包并没有放在Nuget上,而是社区自己放到MyGet上,所以在使用dotne ...

  6. 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”

    前言 面向对象的思想已经非常成熟,而使用C#的程序员对面向对象也是非常熟悉,所以我就不对面向对象进行介绍了,在这篇文章中将只会介绍面向对象在F#中的使用. F#是支持面向对象的函数式编程语言,所以你用 ...

  7. 如果你也会C#,那不妨了解下F#(5):模块、与C#互相调用

    F# 项目 在之前的几篇文章介绍的代码都在交互窗口(fsi.exe)里运行,但平常开发的软件程序可能含有大类类型和函数定义,代码不可能都在一个文件里.下面我们来看VS里提供的F#项目模板. F#项目模 ...

  8. 如果你也会C#,那不妨了解下F#(4):了解函数及常用函数

    函数式编程其实就是按照数学上的函数运算思想来实现计算机上的运算.虽然我们不需要深入了解数学函数的知识,但应该清楚函数式编程的基础是来自于数学. 例如数学函数\(f(x) = x^2+x\),并没有指定 ...

  9. 如果你也会C#,那不妨了解下F#(3):F#集合类型和其他核心类型

    本文链接:http://www.cnblogs.com/hjklin/p/fs-for-cs-dev-3.html 在第一篇中,我们介绍了一些基础数据类型,其实那篇标题中不应该含有"F#&q ...

随机推荐

  1. 浅尝装饰器和AOP

    [写在前面] 参考文章:https://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html[从简单的例子入手进行讲解,由浅入深,很到位] 装饰器部 ...

  2. OO_JAVA_电梯运行模拟_单元总结

    电梯运行模拟--三次作业总结 目录 电梯运行模拟--三次作业总结 总体遵循的设计思路 逻辑解耦 电梯与调度器解耦 楼层信息的存储和变更与电梯.调度器解耦 调度器运行流程解耦 第一次电梯,蠢笨串行先到先 ...

  3. 单片机STM32开发中常用库函数分析

    1.GPIO初始化函数 用法: voidGPIO_Configuration(void) { GPIO_InitTypeDefGPIO_InitStructure;//GPIO状态恢复默认参数 GPI ...

  4. Luogu P1525 [NOIp2010提高组]关押罪犯 | 并查集

    题目链接 这一道题,我用了并查集来做.在此题中,并查集的作用就是:将同一个监狱里的罪犯合并到一起. 思路:将每对罪犯之间的怨气值从大到小排序,再依次把他们分到不同的两个监狱里,当发现这一对罪犯已经在同 ...

  5. 如何系统学习C 语言(中)之 指针篇

    谈到指针,我们可能会想到钟表上的指针,但这里的指针不是现实生活中看得见摸得着的钟表上的指针,c 语言中的指针只存在于逻辑思维中,物理上并不存在. 同时,指针也是C 语言中最精华的部分,通过灵活地运用指 ...

  6. Apache Solr应用服务器存在远程代码执行漏洞👻

    Apache Solr应用服务器存在远程代码执行漏洞 1.描述 Apache Solr是一个开源的搜索服务,使用Java语言开发,主要基于HTTP和Apache Lucene实现的. Solr是一个高 ...

  7. .net core 和 WPF 开发升讯威在线客服系统:把 .Net Framework 打包进安装程序

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 系列文章目录: https://blog.shengxunwei.com/Home/Post/44a3 ...

  8. 【Java】IO流

    File类 介绍 File类的一个对象,代表一个文件或一个文件目录 File类声明在java.io包下 File类中涉及关于文件或文件目录的创建.删除.重命名.修改时间.文件大小等方法,并未涉及到写入 ...

  9. Linux mem 2.7 内存错误检测 (KASAN) 详解

    文章目录 1. 简介 2. Shadow 区域初始化 3. 权限的判断 3.1 read/write 3.2 memxxx() 4. 权限的设置 4.1 buddy 4.1.1 kasan_free_ ...

  10. 从0到1使用Kubernetes系列(七):网络

    本文是从 0 到 1 使用 Kubernetes 系列第七篇,上一篇<从 0 到 1 使用 Kubernetes 系列(六):数据持久化实战> 介绍了 Kubernetes 中的几种常用储 ...