BZOJ 4408 主席数+找规律

 1 #include <cstdio>
 2 const int Maxn=100010;
 3 inline void Get_Int(int &x)
 4 {
 5     char ch=getchar(); x=0;
 6     while (ch<‘0‘ || ch>‘9‘) ch=getchar();
 7     while (ch>=‘0‘ && ch<=‘9‘) {x=x*10+ch-‘0‘; ch=getchar();}
 8 }
 9 struct Node
10 {
11     Node * l,* r; int Sum;
12     inline void Push_Up() {Sum=l->Sum+r->Sum;}
13 };
14 Node Memory[Maxn*100],* port=Memory,* null,* Root[Maxn];
15 int n,m,Mx,a[Maxn],l,r;
16 inline int Max(int x,int y) {return x>y?x:y;}
17 inline void Init() {null=port++; null->Sum=0; null->l=null->r=null;}
18 inline Node * NewNode(Node * x)
19 {
20     Node * Ret=port++;
21     if (x==null) {Ret->l=Ret->r=null; Ret->Sum=0;} else
22         {Ret->l=x->l,Ret->r=x->r,Ret->Sum=x->Sum;}
23     return Ret;
24 }
25
26 Node * Insert(Node * Pre,int o,int l,int r,int v)
27 {
28     Node * Ret=NewNode(Pre);
29     if (l==r)
30     {
31         Ret->Sum+=v;
32         return Ret;
33     }
34     int mid=(l+r)>>1;
35     if (v<=mid) Ret->l=Insert(Pre->l,o<<1,l,mid,v); else Ret->r=Insert(Pre->r,o<<1|1,mid+1,r,v);
36     Ret->Push_Up();
37 }
38 int Sum(Node * Now,int o,int l,int r,int p,int q)
39 {
40     if (Now==null) return 0;
41     if (l==p && r<=q) return Now->Sum;
42     int mid=(l+r)>>1;
43     if (q<=mid) return Sum(Now->l,o<<1,l,mid,p,q);
44     if (p>=mid+1) return Sum(Now->r,o<<1|1,mid+1,r,p,q);
45     if (p<=mid && q>=mid+1) return Sum(Now->l,o<<1,l,mid,p,mid)+Sum(Now->r,o<<1|1,mid+1,r,mid+1,q);
46 }
47 inline int Query(int L,int R)
48 {
49     int Ret=1;
50     while (true)
51     {
52         int t=Sum(Root[R],1,1,Mx,1,Ret)-Sum(Root[L],1,1,Mx,1,Ret);
53         if (t<Ret) return Ret; else Ret=t+1;
54     }
55     return Ret;
56 }
57 int main()
58 {
59     // freopen("data.in","r",stdin);
60     // freopen("data.out","w",stdout);
61     Init();
62     Get_Int(n);
63     for (int i=1;i<=n;i++) Get_Int(a[i]),Mx=Max(Mx,a[i]);
64     Root[0]=NewNode(null);
65     for (int i=1;i<=n;i++) Root[i]=Insert(Root[i-1],1,1,Mx,a[i]);
66     Get_Int(m);
67     for (int i=1;i<=m;i++)
68     {
69         Get_Int(l),Get_Int(r);
70         printf("%d\n",Query(l-1,r));
71     }
72     return 0;
73 }

C++

网上题解一堆..即找到1~Mx.那么1~Mx的Sum就都可以取到.

BZOJ上问Root讨来数据自测全A,交上去WA.

时间: 2024-12-12 06:51:20

BZOJ 4408 主席数+找规律的相关文章

BZOJ 4408 神秘数

题解同各神犇的方法... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 100500 using namespace std; int n,a[maxn],b[maxn],m,l,r,len,tot=0,regis; int ls[maxn*20],rs[maxn*20],sum[maxn*20],root[maxn]; void

奥数 --- 找规律 + 总结

问题 G: 数字的个数时间限制: 1 Sec  内存限制: 128 MB提交: 78  解决: 3[提交][状态][讨论版] 题目描述 输入两个正整数a,b(1=<a<b<=1000000)及0~9的一个数字d 求在a与b之间的所有正整数(含a,b)中数字d出现的次数 输入 第一行一个数T(1 <= T <= 10000) 接下来 T 行每行由 a b d 三个数组成 输出 输出这组数据a与b之间所有正整数中数字d出现的个数,一 行一个 样例输入2 1 100 1 10000

BZOJ 4001 [TJOI2015]概率论 ——找规律

题目太神了,证明还需要用到生成函数. 鉴于自己太菜,直接抄别人的结果好了. #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i

bzoj 1002 [FJOI2007]轮状病毒 高精度&amp;&amp;找规律&amp;&amp;基尔霍夫矩阵

1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2234  Solved: 1227[Submit][Status] Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3 Sample Output 16 HINT Source 基尔霍夫矩阵总算编出来了,这道题考

●BZOJ BZOJ 4408 [Fjoi 2016]神秘数

题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4408 题解: 主席树 首先,对于一些数来说, 如果可以我们可以使得其中的某些数能够拼出 1-ret 那么此时的ANS(神秘数)= ret+1 然后考虑,如果此时存在另一个数小于等于 ANS,(设该数为 x) 则一定可以在原来的1-ret的基础上拼出 1-ret+x 即 ANS 可以更新为 ret+x+1 所以具体的操作就是: 每次查询区间内小于ANS的数的和(SUM),然后如果SUM大于A

BZOJ 1228 E&amp;G(sg函数+找规律)

把一对石子堆看出一个子游戏.打出子游戏的sg表找规律.. 这个规律我是一定找不出来的... 对于i,j,如果 (i-1)%pow(2,k+1) < pow(2,k) (j-1)%pow(2,k+1) < pow(2,k) 那么最小的k值就是sg值. # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <vector

vijos - P1447开关灯泡 (大数模板 + 找规律 + 全然数 + python)

P1447开关灯泡 Accepted 标签:CSC WorkGroup III[显示标签] 描写叙述 一个房间里有n盏灯泡.一開始都是熄着的,有1到n个时刻.每一个时刻i,我们会将i的倍数的灯泡改变状态(即原本开着的现将它熄灭,原本熄灭的现将它点亮),问最后有多少盏灯泡是亮着的. 格式 输入格式 一个数n 输出格式 m,表示最后有m盏是亮着的 例子1 例子输入1[复制] 5 例子输出1[复制] 2 限制 1s 提示 范围:40%的数据保证,n<=maxlongint 100%的数据保证,n<=

The Cow Lineup_找规律

Description Farmer John's N cows (1 <= N <= 100,000) are lined up in a row.Each cow is labeled with a number in the range 1...K (1 <= K <=10,000) identifying her breed. For example, a line of 14 cows might have these breeds: 1 5 3 2 5 1 3 4 4

【55测试】【字符串】【栈】【找规律】

集训第二天,额,考崩了. 第一题 hao 大意:(这个名字就不要在意了,其实是祖玛游戏) 模拟祖玛游戏的模式,给一个'A'~'Z'的字符串,然后有t个插入操作为 “ 添加后的在原字符串的位置 x  插入元素 c ”,字符串中有超过或等于 3 个相同的字符,则被消除,输出每次操作后剩余的字符串,如果为空,则输出“-”. 样例: ACCBA                     输出:  ABCCBA 5   AABCCBA 1 B AABBCCBA 0 A - 2 B A 4 C 0 A 解: