YBTOJ:染颜色(KDtree)

文章目录

  • 题目描述
    • 数据范围
  • 解析
  • 代码

题目描述

在这里插入图片描述

数据范围

n≤105,T≤5n\le10^5,T\le5n105,T5

解析

关键是对问题的转化
考虑一次修改,一个点需要满足哪些条件才可以满足

1.与x的距离不超过lll
2.在x的子树内

这两个条件可以转化为对深度的限制和对dfs序的限制
这样本题就变成一个二维平面区间修改单点查询的问题
问题得以解决

代码

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+100;
const int M=2e6+100;
const int mod=1e9+7;
#define ll long long
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();};while(isdigit(c)){x=x*10+c-'0';c=getchar();};return x*f;
}
struct edge{int to,nxt;
}e[N];
int fi[N],cnt;
void addline(int x,int y){e[++cnt]=(edge){y,fi[x]};fi[x]=cnt;
}
int dfn[N],siz[N],dep[N],tim;
void dfs(int x){siz[x]=1;dfn[x]=++tim;for(int i=fi[x];~i;i=e[i].nxt){int to=e[i].to;//printf("x=%d to=%d\n",x,to);dep[to]=dep[x]+1;dfs(to);siz[x]+=siz[to];}return;
}
int n,m,tot,a[N],rub[N];
//x[0]:dep x[1]:dfs
struct point{int x[2];}p[N];
int F,top;
bool cmp(point a,point b){return a.x[F]<b.x[F];}
point now;
int dis(point a,point b){return abs(a.x[0]-b.x[0])+abs(a.x[1]-b.x[1]);}
struct node{int mn[2],mx[2];int siz,ls,rs,laz,col;point o;
}tr[N];
void pushup(int x){int l=tr[x].ls,r=tr[x].rs;tr[x].mn[0]=tr[x].mx[0]=tr[x].o.x[0];tr[x].mn[1]=tr[x].mx[1]=tr[x].o.x[1];if(l){tr[x].mn[0]=min(tr[x].mn[0],tr[l].mn[0]);tr[x].mx[0]=max(tr[x].mx[0],tr[l].mx[0]);tr[x].mn[1]=min(tr[x].mn[1],tr[l].mn[1]);tr[x].mx[1]=max(tr[x].mx[1],tr[l].mx[1]);}if(r){tr[x].mn[0]=min(tr[x].mn[0],tr[r].mn[0]);tr[x].mx[0]=max(tr[x].mx[0],tr[r].mx[0]);tr[x].mn[1]=min(tr[x].mn[1],tr[r].mn[1]);tr[x].mx[1]=max(tr[x].mx[1],tr[r].mx[1]);}tr[x].siz=tr[l].siz+tr[r].siz+1;return;
}
void print(int k){printf("k=%d (%d %d) ls=%d rs=%d mn=(%d %d),mx=(%d %d)\n",k,tr[k].o.x[0],tr[k].o.x[1],tr[k].ls,tr[k].rs,tr[k].mn[0],tr[k].mn[1],tr[k].mx[0],tr[k].mx[1]);
}
int New(point o,int v){int x=top?rub[top--]:++tot;tr[x].o=o;tr[x].col=v;tr[x].ls=tr[x].rs=0;pushup(x);tr[tot].laz=-1;return x;
}
int build(int l,int r,int f){if(l>r) return 0;int mid=(l+r)>>1;F=f;nth_element(p+l,p+mid,p+r+1,cmp);int k=New(p[mid],1);tr[k].ls=build(l,mid-1,f^1);tr[k].rs=build(mid+1,r,f^1);pushup(k);//print(k);return k;
}
bool in(int x1,int y1,int x2,int y2,int X1,int Y1,int X2,int Y2){return x1>=X1&&x2<=X2&&y1>=Y1&&y2<=Y2;
}
bool out(int x1,int y1,int x2,int y2,int X1,int Y1,int X2,int Y2){return x1>X2||x2<X1||y1>Y2||y2<Y1;
}
void pushdown(int k){int o=tr[k].laz,l=tr[k].ls,r=tr[k].rs;tr[k].laz=-1;if(o==-1) return;if(l){tr[l].laz=tr[l].col=o;}if(r){tr[r].laz=tr[r].col=o;}return;
}
bool operator == (const point a,const point b){return a.x[0]==b.x[0]&&a.x[1]==b.x[1];}
void change(int k,point a,point b,int c){//printf("change:k=%d (%d %d) (%d %d)\n",k,a.x[0],a.x[1],b.x[0],b.x[1]);if(in(tr[k].mn[0],tr[k].mn[1],tr[k].mx[0],tr[k].mx[1],a.x[0],a.x[1],b.x[0],b.x[1])){//printf("return :k=%d\n",k);tr[k].laz=tr[k].col=c;return;}if(in(tr[k].o.x[0],tr[k].o.x[1],tr[k].o.x[0],tr[k].o.x[1],a.x[0],a.x[1],b.x[0],b.x[1])) tr[k].col=c;if(out(tr[k].mn[0],tr[k].mn[1],tr[k].mx[0],tr[k].mx[1],a.x[0],a.x[1],b.x[0],b.x[1])) return;pushdown(k);int l=tr[k].ls,r=tr[k].rs;if(l) change(l,a,b,c);if(r) change(r,a,b,c);pushup(k);
}
int ask(int k,point u){if(tr[k].o==u) return tr[k].col;if(!k||(out(tr[k].mn[0],tr[k].mn[1],tr[k].mx[0],tr[k].mx[1],u.x[0],u.x[1],u.x[0],u.x[1]))) return -1;pushdown(k);int res=max(ask(tr[k].ls,u),ask(tr[k].rs,u));return res;
}
int r;
int ans=2e9;
int main(){int T=read();while(T--){memset(fi,-1,sizeof(fi));cnt=-1;n=read();int iakoshfdoiwefc=read();m=read();for(int i=2;i<=n;i++){int x=read();addline(x,i);}dfs(1);for(int i=1;i<=n;i++){p[i]=(point){dep[i],dfn[i]};//	printf("i=%d dep=%d dfn=%d\n",i,dep[i],dfn[i]);}//	printf("\n");tot=0;r=build(1,n,0);ll ans=0;for(int i=1;i<=m;i++){//printf("\n");int x=read(),l=read(),op=read();if(!op){point u=(point){dep[x],dfn[x]};ll res=ask(r,u);ans+=1ll*i*res%mod;ans%=mod;//printf("i=%d res=%lld\n",i,res);}else{point u=(point){dep[x],dfn[x]};point v=(point){dep[x]+l,dfn[x]+siz[x]-1};change(r,u,v,op);}}printf("%lld\n",ans);}return 0;
}
/**/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群

Kubernetes简介Kubernetes是Google基于Borg开源的容器编排调度引擎&#xff0c;作为CNCF&#xff08;Cloud Native Computing Foundation&#xff09;最重要的组件之一&#xff0c;它的目标不仅仅是一个编排系统&#xff0c;而是提供一个规范&#xff0c;可以让你来描述集群的架…

01分数规划

参考文章 01分数规划 什么是01分数规划&#xff1a; 给定n个a[i]和b[i]&#xff0c;a[i]和b[i]绑定在一起要选同时选&#xff0c;求sum(a[i]) 除以 sum(b[i]) 的最大值&#xff0c;sum为求和函数 对于这种问题我们可以多定义一个数组x[1…n]&#xff0c;x为bool型只取0或者1,…

CF1156D 0-1-Tree(换根DP)

牛犇犇titlesolutioncodetitle 戳一戳 solution 直接设dp[i][k]dp[i][k]dp[i][k]表示以iii为根时&#xff0c;子树内&#xff0c;边权为kkk时的答案 &#xff08;定义写得好复杂&#xff0c;可略过&#xff09; 考虑对于点uuu&#xff0c;vvv是他的一个儿子&#xff0c;两点…

Entity Framework 6.3 和 EF Core 3.0 路线图

尽管脱离了 .NET Core 发布循环&#xff0c;但是 EF Core 正在开发其 3.0 路线图。除此之外&#xff0c;还对原来的 Entity Framework 进行了一些重要的变更。更多服务器端的查询将 LINQ 查询转换为对应的 SQL 查询通常是比较困难的&#xff0c;甚至是不可能的。许多 QRM 只能在…

EFCore+Mysql仓储层建设(分页、多字段排序、部分字段更新)

前沿园子里已有挺多博文介绍了EFCoreMysql/MSSql如何进行使用&#xff0c;但实际开发不会把EF层放在Web层混合起来&#xff0c;需要多个项目配合结构清晰的进行分层工作&#xff0c;本文根据个人实践经验总结将各个项目进行分层&#xff0c;仅供想自己搭建,包含数据仓储以及分页…

[FWT] 时隔一年再回首FWT(快速沃尔什变换),我终于不再是个门外汉

时隔一年再回首FWT&#xff0c;我似乎有了新理解&#xff1f;&#xff1f; 添加了原理的推导&#xff0c;以前就只有模板… 文章目录引入or&#xff08;或&#xff09;卷积原理FWT_or正变换FWT_or逆变换模板and&#xff08;与&#xff09;卷积原理FWT_and正变换FWT_and逆变换模…

Loj #149. 01 分数规划(01分数规划模板题)

链接 题意&#xff1a; 题解&#xff1a; 详细解法看这里 这里说个点&#xff0c;eps一定要开足够小&#xff0c;我一开始开的1e-5&#xff0c;结果就过了90%的数据&#xff0c;开到1e-7就足够了 代码&#xff1a; #include<bits/stdc.h> typedef long long ll; usin…

如何测试 ASP.NET Core Web API

在本文中&#xff0c;我们将研究如何测试你的 ASP .NET Core 2.0 Web API 解决方案。我们将了解使用单元测试进行内部测试&#xff0c;使用全新的 ASP .NET Core 的集成测试框架来进行外部测试。本文要点正确理解并使用单元测试和你的 ASP .NET Core Web API 解决方案一样重要。…

[帝皇杯day 1] [NOIP2018模拟赛]小P的loI(暴力+素筛),【NOIP模拟赛】创世纪(贪心),无聊的数对(线段树)

文章目录T1&#xff1a;小P的loltitlesolutioncodeT2&#xff1a;创世纪titlesolutioncodeT3&#xff1a;无聊的数对titlesolutioncodeT1&#xff1a;小P的lol title solution 此题非常水… 先用素数筛&#xff0c;筛出[1,n][1,n][1,n]中的质数 质数越小&#xff0c;倍数的分…

[2-sat专练]poj 3683,hdu 1814,hdu 1824,hdu 3622,hdu 4115,hdu 4421

文章目录Priest Johns Busiest DaycodePeaceful CommissioncodeLets go homecodeBomb GamecodeEliminate the ConflictcodeBit MagiccodePriest John’s Busiest Day 题目 司仪必须在婚礼开始或结束时出现&#xff0c;考虑把第iii场婚礼拆成两个点 iii&#xff1a;表示司仪在婚…

.NET Core中的一个接口多种实现的依赖注入与动态选择

最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式&#xff0c;为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中&#xff0c;但是在服务调用的时候总是获取到最后注入的那个方法的实现&#xff0c;这时候就在想能不能实现动态的选…

Sightseeing Cows POJ - 3621

题意&#xff1a; L个点&#xff0c;P边的点边带权的有向图&#xff0c;求一个环点权和与边权和比值的最大值。 题解&#xff1a; 01分数规划判负环 详细看这里 还是套用01分数规划模型&#xff0c;点权为value[i],边权为cost[u],一个环为C&#xff0c;问题要求最大化 最…

C# Memory Cache 踩坑记录

背景前些天公司服务器数据库访问量偏高,运维人员收到告警推送,安排我团队小伙伴排查原因.我们发现原来系统定期会跑一个回归测试,该测运行的任务较多,每处理一条任务都会到数据库中取相关数据,高速地回归测试也带来了高频率的数据库读取.解决方案1我们认为每个任务要取的数据大…

[贪心专题]CF549G,CF351E,CF226D,CF1276C,CF1148E,CF798D

文章目录T1&#xff1a;CF1276C Beautiful RectangletitlesolutioncodeT2&#xff1a;CF226D The tabletitlesolutioncodeT3&#xff1a;CF549G Happy LinetitlesolutioncodeT4&#xff1a;CF798D Mike and distributiontitlesolutioncodeT5&#xff1a;CF351E Jeff and Permut…

【数位DP】CF 54C,509C,431D,628D,855E,1245F,95D

这一次有题解了&#xff01;&#xff01;T1&#xff1a;CF54C First Digit LawtitlesolutioncodeT2&#xff1a;CF509C Sums of DigitstitlesolutioncodeT3&#xff1a;CF431D Random TasktitlesolutioncodeT4&#xff1a;CF628D Magic NumberstitlesolutioncodeT5&#xff1a;…

C#如何安全、高效地玩转任何种类的内存之Memory(三)

前言我们都知道&#xff0c;.Net Core是微软推出的一个通用开发平台&#xff0c;它是跨平台和开源的&#xff0c;由一个.NET运行时、一组可重用的框架库、一组SDK工具和语言编译器组成&#xff0c;旨在让.Net developers可以更容易地编写高性能的服务应用程序和基于云的可伸缩服…

.netcore下的微服务、容器、运维、自动化发布

微服务1.1 基本概念1.1.1 什么是微服务&#xff1f;微服务架构是SOA思想某一种具体实现。是一种将单应用程序作为一套小型服务开发的方法&#xff0c;每种应用程序都在其自己的进程中运行&#xff0c;并采用轻量级的通讯机制&#xff08;TCP&#xff09;进行通信。这…

[选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)

多年不考试&#xff0c;一夜回到解放前T1&#xff1a;花园titlesolutioncodeT2&#xff1a;月亮神树titlesolutioncodeT3&#xff1a;保护出题人titlesolutioncodeT1&#xff1a;花园 title 小 L 有一座环形花园&#xff0c;沿花园的顺时针方向&#xff0c;他把各个花圃编号为…

.NET的关于人脸识别引擎分享(C#)

最近在Github上找合适的人脸识别引擎&#xff0c;想要本地化用&#xff0c;不用开放的一些API&#xff08;比如腾讯AI、百度AI&#xff09;,有些场景联不了网&#xff0c;一开始搜索的是时候&#xff08;关键字&#xff1a;face recognition&#xff09;就找到了最出名的face_r…

UOJ#84-[UR #7]水题走四方【dp】

正题 题目链接:https://uoj.ac/problem/84 题目大意 有nnn个点的一棵树&#xff0c;111为根&#xff0c;两个人从根节点往下走&#xff08;只能从深度小的点走到深度大的点&#xff09;。 两个人每一秒都可以一条边&#xff08;也可以不移动&#xff09;&#xff0c;或者不消…