首页 > 其他分享 >暂存

暂存

时间:2024-09-25 20:50:42浏览次数:1  
标签:ch return unlocked int res read 暂存

最近因为学校的"多校联测"的题库不翼而飞,导致很多我在上面提交过的代码直接消失了,手上侥幸还存有两道题,以防电脑关机丢失,故暂存于此。

T1

题目大意:

\[\sum _{i=l}^{r}(i-1)\sum _{j=1}^{n}⌈ log _{i} j⌉ \]

\[范围:2\leq l,r,n\leq 1e18,注:多组测试数据T\leq 1e5 \]

只贴个代码,式子一推就比较显然了

#include<bits/stdc++.h>
using namespace std;
#define int __int128
#define _2 499122177
#define _6 166374059
#define _4 748683265
const int M=1e24;
const int p=998244353;
int m,ans;
vector<int>f[65];
int l,r,n,t,powll[65];
inline int quickpow(int a,int b){
	int res=1;
	while(b){
		if(b&1)res=res*a;
		a=a*a;
		b>>=1;
	}return res;
}
inline int down(int x,int y,int k){
	x--;
	if(k==1)return (x+1+y)*(y-x)%p*_2%p;
	if(k==2)return (y*(y+1)%p*(2*y+1)%p-x*(x+1)%p*(2*x+1)%p+p)*_6%p;
	if(k==3)return ((y+1)*y%p*(y+1)%p*y%p-(x+1)*x%p*(x+1)%p*x%p+p)*_4%p;
	return (f[k][y]-f[k][x]+p)%p;
}
inline int get(int x){
	int l,r,res=0;
	for(int i=60;i>=1;i--){
		r=powll[i],l=powll[i+1]+1;
		if(r>x){
			if(l<=x)res=(res+(x+l-2)*(x-l+1)%p*_2%p*n%p*(i+1)%p-down(l,x,i+1)+(x-l+1)+p)%p;
			return res;
		}
		if(l<=r){
			res=(res+(r+l-2)*(r-l+1)%p*_2%p*n%p*(i+1)%p-down(l,r,i+1)+(r-l+1)+p)%p;
		}
	}
	return (int)((res+(x+n-1)*(x-n)%p*_2%p*n%p-down(n+1,x,1)+(x-n)+p)%p);
}
inline void iint(){
	for(int i=4;i<=61;i++){
		f[i].push_back(0);
		for(int j=1;j<=1000000;j++){
			int k=quickpow(j,i);
			if(k>M)break;
			f[i].push_back((f[i].back()+k)%p);
		}
	}
}
inline int read(){
	register int ans=0;register char ch=getchar_unlocked();
	while(ch<'0' || ch>'9'){ch=getchar_unlocked();}
	while(ch>='0' && ch<='9'){ans=(ans<<1)+(ans<<3)+(ch^48);ch=getchar_unlocked();}
	return ans;
}
inline void print(int n){
	if(n>9)print(n/10);
	putchar_unlocked(n%10+48);
}
int poww(int x,int k){
	if(k==1)return x;
	return pow(x,1.0/k);
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	t=read();
	iint();
	while(t--){
		l=read();r=read();n=read();
		int k=log2((long long)n)+1;
		for(int i=1;i<=k;i++){
			powll[i]=poww(n,i);
		}
		print((get(r)-get(l-1)+p)%p);
		putchar_unlocked('\n');
	}
	return 0;
}

T2

题目大意:
一棵数,\(n\)个点,每个点都有一个权值\(ai\),\(q\)次询问,问从\(x\)点到\(y\)点经过的路径上是否存在一个点的权值为\(w\)

\[范围:a[i]\leq n,q\leq 5e5 \]

出题人没卡主席树,空间刚好不炸直接碾过去了

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,m,a[N],dep[N],dfn[N],num;
int h[N],tot,root[N],f[N];
int x,y,z,t,k,cnt,st[N][21];
struct sb{
	int nxt,to;
}e[N<<1];
struct op{
	int l,r,sum;
}tr[16000005];
void add(int x,int y){
	e[++cnt]={h[x],y};
	h[x]=cnt;
}
inline void pushup(int rt){
	tr[rt].sum=tr[tr[rt].l].sum+tr[tr[rt].r].sum;
}
void build(int &rt,int l,int r){
	rt=++tot;
	if(l==r)return;
	int mid=(l+r)>>1;
	build(tr[rt].l,l,mid);
	build(tr[rt].r,mid+1,r);
}
int insert(int rt,int l,int r,int x){
	int root=++tot;
	tr[root]=tr[rt];
	if(l==r){
		tr[root].sum++;
		return root;
	}
	int mid=(l+r)>>1;
	if(x<=mid)tr[root].l=insert(tr[root].l,l,mid,x);
	else tr[root].r=insert(tr[root].r,mid+1,r,x);
	pushup(root);
	return root;
}
bool query(int u,int v,int k,int w,int l,int r,int x){
	int op=tr[u].sum+tr[v].sum-tr[k].sum-tr[w].sum;
	if(op==0)return 0;
	if(l==r&&l==x)return 1;
	int mid=(l+r)>>1;
	if(x<=mid)return query(tr[u].l,tr[v].l,tr[k].l,tr[w].l,l,mid,x);
	return query(tr[u].r,tr[v].r,tr[k].r,tr[w].r,mid+1,r,x);
}
void dfs(int x,int fa){
	root[x]=insert(root[fa],0,n,a[x]);
	dfn[x]=++num;dep[x]=dep[fa]+1;
	st[dfn[x]][0]=x;f[x]=fa;
	 // cout<<st[dfn[x]][0]<<' ';
	for(int i=h[x];i;i=e[i].nxt){
		int y=e[i].to;
		if(y==fa)continue;
		dfs(y,x);
	}
}
inline int get(int x,int y){
	return dep[x]<dep[y]?x:y;
}
inline int lca(int x,int y){
	if(x==y)return x;
	if((x=dfn[x])>(y=dfn[y]))swap(x,y);
	int k=__lg(y-x++);
	return f[get(st[x][k],st[y-(1<<k)+1][k])];
}
inline int read(){
	register int ans=0;register char ch=getchar_unlocked();
	while(ch<'0' || ch>'9'){ch=getchar_unlocked();}
	while(ch>='0' && ch<='9'){ans=(ans<<1)+(ans<<3)+(ch^48);ch=getchar_unlocked();}
	return ans;
}
inline void print(int n){
	if(n>9)print(n/10);
	putchar_unlocked(n%10+48);
}
signed main(){
	// freopen("in.in","r",stdin);
	// freopen("out.out","w",stdout);
	n=read();m=read();
	for(int i=1;i<=n;i++)a[i]=read();
	build(root[0],0,n);
	for(int i=1;i<n;i++){
		x=read();y=read();
		add(x,y);add(y,x);
	}
	dfs(1,0);
	for(int j=1;j<=__lg(n);j++){
		for(int i=1;i+(1<<j)-1<=n;i++){
			st[i][j]=get(st[i][j-1],st[i+(1<<(j-1))][j-1]);
		}
	}
	while(m--){
		x=read();y=read();z=read();
		int lc=lca(x,y);
		// cout<<x<<' '<<y<<' '<<lc<<endl;
		if(!query(root[x],root[y],root[lc],root[f[lc]],0,n,z)){
			putchar_unlocked('N');
			putchar_unlocked('o');
			putchar_unlocked('t');
		}
		putchar_unlocked('F');
		putchar_unlocked('i');
		putchar_unlocked('n');
		putchar_unlocked('d');
		putchar_unlocked('\n');
	}
	return 0;
}

标签:ch,return,unlocked,int,res,read,暂存
From: https://www.cnblogs.com/houburzyx/p/18432141

相关文章

  • Git 工作区、暂存区与修改全解析
    工作区和暂存区是Git中一个非常重要的概念,弄明白了他们,就弄明白了Git的很多操作到底干了什么。‍工作区(WorkingDirectory)工作区,就是一个目录,比如我的LearnGit​文件夹就是一个工作区:​我们平时更新版本什么的,都是在这里完成的,可以理解成是在这里工作的。‍‍版本库......
  • 工作区、暂存区和仓库
    在使用Git进行版本控制时,工作区、暂存区和仓库概念的详细解释:1.工作区(WorkingDirectory)工作区是你在计算机上实际编辑文件的地方。当你克隆一个Git仓库或在现有目录中初始化一个Git仓库时,这个目录就是你的工作区。工作区包含项目的实际文件,你可以在这里进行修改、添加或......
  • 笔记暂存
    有n个物品,每个物品有重量wi和体积vi且密度均匀。你可以切物品,每次可以选一个物品切成两部分,也就是选一个0到1的实数k把物品分成k和(1-k)比例的两个物品。问题1.要想保证切完之后一定能把物品分成两组使得两组重量和相等,体积和也相等,X至少是几。对于\(f(0)<0\)和\(f(1)>\)求......
  • 9.23 D 暂存
    鉴于5k和int_R等大神都认为这道题80pts档是一个普通的线段树,作为一个线段树狂热爱好者果断尝试,但在打出30行的pushup后蚌埠住了,但还是想切掉,所以暂存一下,什么时候打出来什么时候删置顶。目前进度:pushup,建树你们要是能发现问题记得说啊,#include<bits/stdc++.h>#defi......
  • Git 工作区、暂存区和版本库
    基本概念我们先来理解下Git工作区、暂存区和版本库概念:工作区:就是你在电脑里能看到的目录。暂存区:英文叫stage或index。一般存放在 .git 目录下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是......
  • Git 工作区、暂存区和版本库
    Workspace:工作区。编写代码的区域。Repository:仓库区(或本地仓库)。用来保存commit,一个commit,就是工作区的一个历史版本。Index/Stage:暂存区。用来暂存生成commit所需的信息,可看作临时的commit,gitadd将工作区的指定内容加入暂存区,gitcommit依照暂存区信息生成commit,并......
  • Mac版Sourcetree暂存代码和取出代码
    实际开发中经常遇到开发一半,要拉代码或者切分支的情况,这时候开发一半的代码如果不提交或者删除重置是无法拉取和切换分支的,那么这个时候可以把这部分代码暂存起来,然后在想取出的时候取出就行了1.点击暂存文件,如下图2.点击贮藏,然后输入一个标识3.此时就可以正常拉取代码和切换......
  • vue ant-design上传文件,暂存后在其他页面提交数据(file格式转base64后保存数据,其他页面
    longlongtimenoupdate,huuuuu~最近做一个看起来简单但是功能有点繁琐的东西就是再A页面上传文件,然后B页面确定上传后调用接口,我不知道我这个逻辑对不对哈,有毛病求指教首先用的ant-design框架上传文件<a-uploadlist-type="text":multiple="false":file-list="fileList"......
  • 【Git入门和实战】第2课:git中的专有名词和概念解释:仓库、工作目录、暂存区、远程仓库
    本文是git入门到实战系列文章的第2课,主要讲解git中的专有名词和概念,主要有仓库(repository)、工作目录(WorkingDirectory)、暂存区(Stage/Index)、远程仓库(remote)、、提交(commit)、HEAD指针、文件状态、分支(branch)、合并(merge)、标签(tag)、引用(ref)。(文末附练习题,......
  • 如何提交代码、暂存代码、切换分支
    切换分支最开始写代码的时候直接写在preview的分支,同事教我怎么将代码放到自己的分支上(另也查了一下其他方法)新建分支,commit提交代码其他两种方法参考这篇博客暂存代码试了一下,要先将修改点stage,然后命令行gitstashpushgitstashlist查看暂存gitstashpop释放暂存......