BZOJ 4408 主席数+找规律
#include <cstdio>
const int Maxn=;
inline void Get_Int(int &x)
{
char ch=getchar(); x=;
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
}
struct Node
{
Node * l,* r; int Sum;
inline void Push_Up() {Sum=l->Sum+r->Sum;}
};
Node Memory[Maxn*],* port=Memory,* null,* Root[Maxn];
int n,m,Mx,a[Maxn],l,r;
inline int Max(int x,int y) {return x>y?x:y;}
inline void Init() {null=port++; null->Sum=; null->l=null->r=null;}
inline Node * NewNode(Node * x)
{
Node * Ret=port++;
if (x==null) {Ret->l=Ret->r=null; Ret->Sum=;} else
{Ret->l=x->l,Ret->r=x->r,Ret->Sum=x->Sum;}
return Ret;
} Node * Insert(Node * Pre,int o,int l,int r,int v)
{
Node * Ret=NewNode(Pre);
if (l==r)
{
Ret->Sum+=v;
return Ret;
}
int mid=(l+r)>>;
if (v<=mid) Ret->l=Insert(Pre->l,o<<,l,mid,v); else Ret->r=Insert(Pre->r,o<<|,mid+,r,v);
Ret->Push_Up();
}
int Sum(Node * Now,int o,int l,int r,int p,int q)
{
if (Now==null) return ;
if (l==p && r<=q) return Now->Sum;
int mid=(l+r)>>;
if (q<=mid) return Sum(Now->l,o<<,l,mid,p,q);
if (p>=mid+) return Sum(Now->r,o<<|,mid+,r,p,q);
if (p<=mid && q>=mid+) return Sum(Now->l,o<<,l,mid,p,mid)+Sum(Now->r,o<<|,mid+,r,mid+,q);
}
inline int Query(int L,int R)
{
int Ret=;
while (true)
{
int t=Sum(Root[R],,,Mx,,Ret)-Sum(Root[L],,,Mx,,Ret);
if (t<Ret) return Ret; else Ret=t+;
}
return Ret;
}
int main()
{
// freopen("data.in","r",stdin);
// freopen("data.out","w",stdout);
Init();
Get_Int(n);
for (int i=;i<=n;i++) Get_Int(a[i]),Mx=Max(Mx,a[i]);
Root[]=NewNode(null);
for (int i=;i<=n;i++) Root[i]=Insert(Root[i-],,,Mx,a[i]);
Get_Int(m);
for (int i=;i<=m;i++)
{
Get_Int(l),Get_Int(r);
printf("%d\n",Query(l-,r));
}
return ;
}
C++
网上题解一堆..即找到1~Mx.那么1~Mx的Sum就都可以取到.
BZOJ上问Root讨来数据自测全A,交上去WA.
BZOJ 4408 主席数+找规律的更多相关文章
- POJ2402 Palindrome Numbers第K个回文数——找规律
问题 给一个数k,给出第k个回文数 链接 题解 打表找规律,详见https://www.cnblogs.com/lfri/p/10459982.html,差别仅在于这里从1数起. AC代码 #inc ...
- BZOJ 4408 神秘数
题解同各神犇的方法... #include<iostream> #include<cstdio> #include<cstring> #include<alg ...
- bzoj 1432 数学(找规律)
我们可以发现所有的情况(除n=1时),都可以找到两个交叉的直线,就是第一层的那 两个线段所在的直线如图中左 那么我们以这个为准,两边对称着加直线,会得到右图,每一层是折线,且每 加一对儿就多两条线段, ...
- BZOJ 4001 [TJOI2015]概率论 ——找规律
题目太神了,证明还需要用到生成函数. 鉴于自己太菜,直接抄别人的结果好了. #include <map> #include <cmath> #include <queue ...
- ●BZOJ 4408 [Fjoi 2016]神秘数
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4408 题解: 主席树 首先,对于一些数来说, 如果可以我们可以使得其中的某些数能够拼出 1- ...
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- BZOJ [FJOI2007]轮状病毒 (找规律)
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6009 Solved: 3282[Submit][Statu ...
- BZOJ 4706: B君的多边形 找规律
4706: B君的多边形 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4706 Description 有一个正n多边形,我们要连接一些 ...
- BZOJ 1192 鬼谷子的钱袋 找规律
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1192 题目大意: 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向 ...
随机推荐
- (转抄:人人都是产品经理——iamsujie)如何提高产品规划PPT的能力
做产品几年之后,不可避免的要碰到写规划这件事儿,虽说不少人,不乏大牛,对规划持“无用论”的观点, 但大多数人其实还是更相信这个段子: 在一个公司里,看一个人的地位,主要看他平时写的文档类型——写wor ...
- java String
实例一.substring(int beginIndex,int endIndex) String end ="2007-12-31";System.out.println(end ...
- occ 中绘制二维矩形
在屏幕上绘制一个二级矩形 #include <Visual3d_Layer.hxx> #include <V3d_LayerMgr.hxx> #include <Visu ...
- Gerald's Hexagon
Gerald's Hexagon Gerald got a very curious hexagon for his birthday. The boy found out that all the ...
- JAVA 多线程随笔 (三) 多线程用到的并发容器 (ConcurrentHashMap,CopyOnWriteArrayList, CopyOnWriteArraySet)
1.引言 在多线程的环境中,如果想要使用容器类,就需要注意所使用的容器类是否是线程安全的.在最早开始,人们一般都在使用同步容器(Vector,HashTable),其基本的原理,就是针对容器的每一个操 ...
- jfinal基本应用 --报主键重复
在使用jfinal 的Model过程中有一个很怪异的问题,发布到服务器上,只要是往表中添加字段,就报主键重复. 1.我添加表的时候调用了 public void create(Map map){ St ...
- IOS Core Animation Advanced Techniques的学习笔记(四)
第五章:Transforms Affine Transforms CGAffineTransform是二维的 Creating a CGAffineTransform 主要有三种变 ...
- nRF24L01芯片控制——迈向无线的第一步
nRF24L01芯片是一款专供单片机的射频收发芯片.工作于2.4GHz~2.5GHz ISM频段.融合了shockburst技术. 我先列出该芯片的硬件参数资料: 至于每个引脚的具体用途,可以参见技术 ...
- 杭电--1102--Constructing Roads--并查集
Constructing Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- gdb注意事项
假设我当前有文件test.cpp,要gdb调试,先shell上执行:g++ test.cpp -o test -g 1. gdb调试针对的文件是debug模式的可执行文件. 上面-g参数即加上debu ...