首页 > 其他分享 >hdu4417(权值离散化后建立主席树)

hdu4417(权值离散化后建立主席树)

时间:2024-05-22 15:22:19浏览次数:33  
标签:pre val int 化后 ls hdu4417 权值 include define

Problem - 4417 (hdu.edu.cn)

马里奥是举世闻名的水管工。他“魁梧”的身材和惊人的跳跃能力让我们想起了。现在可怜的公主又遇到了麻烦,马里奥需要拯救他的爱人。我们将通往老板城堡的道路视为一条线(长度为 n),在每个整数点 i 上都有一块高度为 hi 的砖。现在的问题是,如果马里奥可以跳跃的最大高度是 H,那么 [L, R] 马里奥可以击中多少块砖。

输入

第一行后面跟着一个整数 T,即测试数据的数量。
对于每个测试数据:
第一行包含两个整数n,m(1<=n<=10^5,1<=m<=10^5),n是道路的长度,m是查询的次数。
下一行包含 n 个整数,每个砖的高度,范围为 [0, 1000000000]。
接下来的 m 行,每行包含三个整数 L, R,H.( 0 <= L <= R < n 0 <= H <= 1000000000。

输出

对于每个案例,输出“Case X:”(X 是从 1 开始的案例编号),后跟 m 行,每行包含一个整数。第 i 个整数是 Mario 可以在第 i 个查询中击中的砖块数。

思路

目标是找到查询区间[L,R]中比H小或者等于的数有多少个,那我们可以对数组离散化后建立权值主席树,sum数组表示对应权值[l,r]区间中的包含的已有数的个数,后续操作就比较常规了。

 1 #define IO std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
 2 #define bug(x) cout<<#x<<" is "<<x<<endl
 3 #include <iostream>
 4 #include <list>
 5 #include <unordered_map>
 6 #include <map>
 7 #include <vector>
 8 #include <sstream>
 9 #include <cmath>
10 #include <algorithm>
11 #define iter ::iterator
12 using namespace  std;
13 typedef long long ll;
14 typedef pair<int,int>P;
15 #define pb push_back
16 #define mk make_pair
17 #define se second
18 #define fi first
19 
20 const ll mod=1e9+7;
21 const int N=1e5+5;
22 int n,q;
23 int a[N],b[N],rt[N*32],ls[N*32],rs[N*32],sum[N*32];
24 int cnt;
25 void up(int &o,int pre,int l,int r,int val){
26     o=++cnt;
27     ls[o]=ls[pre];
28     rs[o]=rs[pre];
29     sum[o]=sum[pre]+1;
30     if(l==r)return;
31     int m=(l+r)/2;
32     if(val<=m)up(ls[o],ls[pre],l,m,val);
33     else up(rs[o],rs[pre],m+1,r,val);
34 }
35 int qu(int o,int pre,int l,int r,int val){
36 
37     int res=sum[o]-sum[pre];
38     //printf("%d %d %d\n",l,r,res);
39     if(r<=val)return res;
40     if(l>val)return 0;
41     if(l==r)return res;
42     int m=(l+r)/2;
43     res=qu(ls[o],ls[pre],l,m,val);
44     if(val>m)res+=qu(rs[o],rs[pre],m+1,r,val);
45     return res;
46 }
47 int main(){
48     IO;
49     int T,Case=0;
50     cin>>T;
51     while(T--){
52         cnt=0;
53         cin>>n>>q;
54         
55         for(int i=0;i<n;i++)cin>>a[i],b[i]=a[i];
56         sort(a,a+n);
57         int m=unique(a,a+n)-a;
58         for(int i=0;i<n;i++) b[i]=lower_bound(a,a+m,b[i])-a+1;
59         for(int i=1;i<=n;i++){
60             up(rt[i],rt[i-1],1,m,b[i-1]);
61         }
62         cout<<"Case "<<++Case<<":"<<endl;
63         while(q--){
64             int L,R,val;
65             cin>>L>>R>>val;
66             int x=val;
67             val=lower_bound(a,a+m,val)-a+1;
68             if(a[val-1]!=x)val--;
69             cout<<qu(rt[R+1],rt[L],1,m,val)<<endl;
70         }
71         printf("\n");
72     }
73 }

 

标签:pre,val,int,化后,ls,hdu4417,权值,include,define
From: https://www.cnblogs.com/ccsu-kid/p/18206303

相关文章

  • 微软Phi-3,3.8亿参数能与Mixtral 8x7B和GPT-3.5相媲美,量化后还可直接在IPhone中运行
    Phi-3系列Phi-3是一系列先进的语言模型,专注于在保持足够紧凑以便在移动设备上部署的同时,实现高性能。Phi-3系列包括不同大小的模型:Phi-3-mini(38亿参数) -该模型在3.3万亿个令牌上进行训练,设计得足够小,可以在现代智能手机上运行。尽管体积紧凑,它的性能却可与更大的模型如Mixtra......
  • 纯前端实现发版版本变化后页面重新加载
    0.原理通过在前端静态文件目录下维护一个版本,首次进入页面存储当前版本,轮询查询静态文件版本是否发生变化,如果变化则重新加载页面,如果未变化,则继续轮询1.优点比通过后端维护在数据库版本进行查询消耗更小,不需要查询数据库,也不用走到后台代码层,只需要访问到ngxin/......
  • [蓝桥杯 2019 省赛 AB] 完全二叉树的权值
    #[蓝桥杯2019省AB]完全二叉树的权值##题目描述给定一棵包含$N$个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是$A_1,A_2,\cdotsA_N$,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有......
  • 窗口最大化后跑偏几个像素
    windows平台首先通过代码实现窗口最大化inttitle_bar_height=style()->pixelMetric(QStyle::PM_TitleBarHeight);//获取标题栏高度QRectprimary_rect=QApplication::desktop()->availableGeometry();this->setGeometry(0,title_bar_height,primary_rect.width(),p......
  • 权值线段树
    与普通线段树并无其他区别,只不过存储的信息是每个值出现的次数罢了理解图importsysinput=lambda:sys.stdin.readline()classTree:def__init__(self,N):self.cnt=[0for_inrange(N)]defupdate(self,root,l,r,x,cnt):ifl=......
  • react我需要在表格数据变化后,下一次渲染结束后,执行表单校验逻辑
    在React中,要在表格数据变化后且下一次渲染完成后执行表单校验逻辑,可以考虑在useEffect钩子中处理这个问题。useEffect会在每次渲染完成后的DOM更新之后执行指定的回调函数。以下是一个简化的示例:importReact,{useState,useEffect}from'react';functionYourComponent({......
  • Python众筹项目结果预测:优化后随机森林分类器可视化
    全文链接:https://tecdat.cn/?p=35412原文出处:拓端数据部落公众号分析师:YiChenXia随着信息技术的飞速发展,众筹作为一个互联网金融的子领域已经成为个人和小企业主筹集资金支持梦想的创新渠道。无论对于众筹发起者还是众筹平台而言,如何利用历史数据去准确预测一个众筹项目的成功......
  • 当我需要实现某个外部属性变化,更新表格的某一列,所有值均为变化后的值,应该如何实现
    在这里,将tableData添加到useEffect的依赖数组会导致无限循环。因为在useEffect内部更新了tableData状态,每次状态改变又会触发useEffect再次执行,形成无限循环。解决这个问题的一种方法是,在状态更新时创建一个新的数组,而不是直接修改现有数组。这样就不会触发依赖数组中tableData的......
  • P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值
    题目描述给定一棵包含N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是​,如下图所示: 现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。注:根的深度是 1......
  • 根据合法性边的权值视为0/1
    题目链接思路:二分枚举答案+\(dijkstra\)验证答案二分枚举答案\(mid\),通过\(dijkstra\)求最短路,将需要升级的边的权值看作\(1\),不需要升级的边的权值看作\(0\),这样求得的最小值就是需要升级的次数这个将边权值根据需要设置为\(0/1\)的技巧需要注意#include<iostream......