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 题目大意: 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向 ...
随机推荐
- 【翻译】安卓新播放器EXOplayer介绍
http://developer.android.com/guide/topics/media/exoplayer.html 前言: Playing videos and music is a p ...
- MySQL exists的用法介绍
有一个查询如下: 1 SELECT c.CustomerId, CompanyName 2 FROM Customers c 3 WHERE EXISTS( 4 SELECT Or ...
- Android开发--apk的生成
0.前言 此方法为eclipse中生成apk的方法!!!! 1.生成ketstore 在命令提示符中找到java的jdk路径,例如: D:\study software\Java\jdk1.8.0_2 ...
- 基于KEIL4开发ARM9(S3C2440)的裸机程序
本文主要介绍如何使用Keil4开发ARM9(S3C2440)裸机程序. 说明: 一.平台: 操作系统:Windows XP系统 KEIL版本:4.73 开发板:ARM9(S3C2440) 二.建立工程 ...
- spider_text
__author__ = 'sus'import urllibimport urllib2import re def getPage(url): #获取网页 request = urll ...
- 利用WPS 2012/2013 0day针对中国政府部门的定向攻击
今天早上,我们捕获到一个利用wps 2012/2013 0day针对中国政府部门的钓鱼邮件定向攻击事件. 邮件发件人以2014中国经济形势解析高层报告组委会 标题发出,附件为包含wps2012 0da ...
- CAST()函数
语法: CAST(expression AS data_type) 参数说明: expression:任何有效的SQServer表达式 AS:用于分割两个参数,在AS之前的是需要处理的数据,在AS之后 ...
- POJ 2229 Sumsets
Sumsets Time Limit: 2000MS Memory Limit: 200000K Total Submissions: 11892 Accepted: 4782 Descrip ...
- UWP 动画系列之模仿网易云音乐动画
一.前言 最近在弄毕业设计(那时坑爹选了制作个UWP商店的APP),一个人弄得烦躁,在这里记录一些在做毕业设计时的学习过程.由于我的毕业设计是做一个音乐播放器,那么Windows商店上优秀的软件当然是 ...
- Pycharm快捷键
相比于eclipse,pycharm的确很方便,现就一些常用的快捷键记录一下: CTRL Q: 在参数列表位置,显示可以输入的所有参数.CTRL Q: 查看选中方法的文档字符串 阅读CTRL -: 折 ...