Day6 - F - KiKi's K-Number HDU - 2852】的更多相关文章

For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. Now Kiki meets a very similar problem, kiki wants to design a container, the container is to support the three operations. Push: Push a given element e…
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 2852 题意: 一个容器,三种操作: (1) 加入一个数 e (2) 删除一个数 e,如果不存在则输出 No Elment! (3) 查询比a大的数中的第k小数,不存在就输出 Not Find! 解法: 关于第三点,可以先查询小于等于a的数的个数cnt,然后直接查询第cnt+k小数就行了 . 二分+树状数组 或者 主席树(有点杀鸡用牛刀的感觉 ...) 也是可以做的  _(:з」∠)_ code:线段树 #include <iost…
Minimum Inversion Number HDU - 1394 求最小反转数,就是求最少的逆序对. 逆序对怎么求,就是先把所有的数都初始化为0,然后按照顺序放入数字,放入数字前查询从这个数往后面的数的位置是不是被占了,被占了说明有逆序对. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> #define debug(n) printf(&qu…
\(f(i)\) 为 \(k\) 次多项式,\(\sum_{i=0}^nf(i)\cdot q^i\) 的 \(O(k\log k)\) 求法 令 \(S(n)=\sum_{i=0}^{n-1}f(i)\cdot q^i\),有一个结论,存在一个 \(\le k\) 次多项式 \(g(n)\) 使得 \(S(n)=q^ng(n)-g(0)\). 证明 \(n=0\) 时显然成了,假设 \(n\le k-1\) 时都成立,考虑 \(n=k\) 时的情况: \[qS(n)=\sum_{i=0}^{n…
先补充从n个数中求第k小数的理论知识........ 睡觉去~ ------------------------------------------又要睡觉的分割线------------------------------------------ HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意,给定三种操作: 0  a代表插入一个数 1  a代表删除掉a这个数 2 a k 查询比a大的第k个数 跟着大神走~树状数组+二分 树状数组…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意:操作①:往盒子里放一个数.操作②:从盒子里扔掉一个数.操作③:查询盒子里大于a的第K小数. 解题思路: 由于模型是盒子,而不是序列,所以可以用树状数组的顺序维护+逆序数思想. 对应的树状数组Solution: 放一个数 $Add(val,1)$ 类似维护逆序数的方法,对应位置上计数+1. 注意Add的while范围要写成$while(x<maxn)$ 如果范围不是最大,那么会导致某些…
题意:给出三种操作 0 e:将e放入容器中 1 e:将e从容器中删除,若不存在,则输出No Elment! 2 a k:搜索容器中比a大的第k个数,若不存在,则输出Not Find! 思路:树状数组+二分搜索,具体见代码吧. #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> /* AC 树状数组+二分搜索 题意:给出三种操作 0 e:将e放入容器中…
一共最多才100000个数,并且数值范围0~100000. 树状数组 C[i] 记录数值为 i 的数有多少个. 删除时如果Query( a ) - Query( a - 1 ) == 0 则该数不存在. 求大于a的第K大数只需要对大于a的数二分查找一下,Query( MAXN ) - Query(a)为大于 a 的数的总个数,如果小于K 则不存在. #include <cstdio> #include <cstdlib> #include <cstring> #incl…
权值线段树 #include <cstdio> #include <cstring> const int N=200000,M=220000; int k,q,x,y,sum[M<<2],n; char c; void up(int x){sum[x]=sum[x<<1]+sum[x<<1|1];} void update(int t,int num,int l,int r,int x){ if(l==r){ if(sum[x]+num<0…
题意: 要求维护一个数据结构,支持下面三种操作: \(0 \, e\):插入一个值为\(e\)的元素 \(1 \, e\):删除一个值为\(e\)的元素 \(2 \, a \, k\):查询比\(a\)大的数中的第\(k\)小 分析: 因为插入的数在\(10^5\)内,所以不需要离散化. 维护一棵主席树,每次插入或者删除元素都新建一棵主席树. 对于查询操作,先查询不超过\(a\)的元素的个数\(cnt\),然后再查询序列中第\(cnt+k\)小即可. #include <cstdio> #in…
题意:给出m个操作,0:是增加一个数,add(x,1)1:是删除一个指定的数,这个是看sum(x) - sum(x-1)是否为0,为0的话则不存在,不为0的话,则add(x,-1)2:是查询比x大的数中第k大的数,先求出比x小的个数s,假设比x大的数中第k大的数为y,那么比y小的个数有s+k个二分y的值来找 #include<iostream> #include<cstdio> #include<cstring> #include <cmath> #incl…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5981 题意:A在[L, R]之间随机选取一个数X,之后B来猜这个数,如果猜的数比X小,那么A就告诉B猜小了,如果猜的数大于X,那么以后A永远只会回答B是否猜对了,问在最坏的情况下B至少要猜多少次,并求出有多少种方案. 题解:参考自:https://blog.csdn.net/jaihk662/article/details/77435217     补充关于猜测次数的理解:如果第一次猜测的数大于等于…
#include<iostream> #include<cstring> using namespace std; ; int tr[N]; int lowbit(int x) { return x&(-x); } void add(int x,int a) { for(int i=x;i<N;i+=lowbit(i)) tr[i]+= a; } int sum(int x) { ; for(int i=x;i;i-=lowbit(i)) ans+=tr[i]; re…
题目链接 省赛训练赛上一题,貌似不难啊.当初,没做出.离线+树状数组+二分. #include <cstdio> #include <cstring> #include <iostream> using namespace std; #define N 100000 ]; ][]; int lowbit(int t) { return t&(-t); } void insert(int t,int d) { while(t <= N) { p[t] +=…
KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3966    Accepted Submission(s): 1758 Problem Description For the k-th number, we all should be very familiar with it. Of course,to…
http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 309    Accepted Submission(s): 73 Problem Description When the magic ball game tu…
Problem Description We define a sequence F: ⋅ F0=0,F1=1;⋅ Fn=Fn−1+Fn−2 (n≥2). Give you an integer k, if a positive number n can be expressed byn=Fa1+Fa2+...+Fak where 0≤a1≤a2≤⋯≤ak, this positive number is mjf−good. Otherwise, this positive number is …
>传送门< 题意:给你一个字符串s,求出其中能整除300的子串个数(子串要求是连续的,允许前面有0) 思路: >动态规划 记f[i][j]为右端点满足mod 300 = j的子串个数,可以容易的转移 则状态转移方程为:f[i][(10*j+num[i]) %300] = f[i][(10*j+num[i]) %300] + f[i-1][j] 解释:假如给你个数3,很容易得出3mod300的值就是3,f[3] = 1,然后在3后面加一位1,变为31,则31mod300的值为31,f[31…
number 题意 给一个数字串,问有几个子串是300的倍数 分析 dp写法:这题一看就很dp,直接一个状态dp[i][j]在第i位的时候膜300的余数是j左过去即可.这题比赛的时候样例老是少1,后面发现是中间忘记加上了,铁憨憨,以后一定要冷静,分析状态,找到少的那部分. #include<bits/stdc++.h> #include<vector> #include<algorithm> using namespace std; #define pb push_ba…
链接:https://ac.nowcoder.com/acm/contest/884/K来源:牛客网 题目描述 300iq loves numbers who are multiple of 300. One day he got a string consisted of numbers. He wants to know how many substrings in the string are multiples of 300 when considered as decimal inte…
E - Tunnel Warfare HDU - 1540 对这个题目的思考:首先我们已经意识到这个是一个线段树,要利用线段树来解决问题,但是怎么解决呢,这个摧毁和重建的操作都很简单,但是这个查询怎么查呢, 这个是不是要判断这一个点左边和右边最远的距离,然后相加起来就可以了,所以就是维护一个区间最左边和最右边的值,然后把他们合并就是最大值. 这个最左边的值 pre_max = 子左节点的 pre_max 如果这个 pre_max==len 那就可以合并子右节点的 pre_max 最右值同理 这个…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5062 题目意思:给出 N,找出 1 - 10^N 中满足 Beautiful Palindrome Numbers (BPN)的数量有多少. 满足 BPN 的条件有两个:(1)回文串   (2)对称的部分从左到右递增排放. (1)版本 1 (比较麻烦,建议看版本2)        46ms #include <iostream> #include <cstdio> #include &…
思路:加一个数e就用update(e,1).删除元素e就用update(e,-1).找比a大的第k大的元素就用二分查找. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define Maxn 120010 #define lowbit(x) (x&(-x)) using namespace std; int C[Maxn]; int Sum(int…
The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that satisfy i < j and ai > aj. For a given sequence of numbers a1, a2, ..., an, if we move the first m >= 0 numbers to the end of the seqence, we wil…
题目大意:若一个数以某个位置为支点,支点左右的加权和相同,这样的数被称为平衡数,求区间内平衡数的个数 思路:枚举支点位置,针对每个支点进行数位DP,但是0比较特殊,假设该数的长度为len,枚举len次支点位置,0会被重复计算len次,但我们只需要统计一次. #include<stdio.h> #include<algorithm> #include<string.h> #include<stdlib.h> #include<iostream> u…
https://ac.nowcoder.com/acm/contest/884/K 一开始整了好几个假算法,还好测了一下自己的样例过了. 考虑到300的倍数都是3的倍数+至少两个零(或者单独的0). 求以第i个位置的数为结尾的前缀和为j的数的方案数. 当遇到至少两个0的时候,ans+=dp[0][i-2]+1. +1是那两个0的贡献. 这样子算会漏算单独的0的贡献,最后加回去. 还因为忘记mod3段错误好几次. 老了. #include <bits/stdc++.h> using namesp…
As we know, Big Number is always troublesome. But it's really important in our ACM. And today, your task is to write a program to calculate A mod B. To make the problem easier, I promise that B will be smaller than 100000. Is it too hard? No, I work…
题意:给一些人和一些伞的坐标,然后每个人都有一定的速度,还有多少时间就会下雨,问最多能有多少人可以拿到伞. 分析:题意很明确,可以用每个人和伞判断一下是否能够达到,如果能就建立一个联系.不过这道题的数据还是挺大的,第一次使用的匈牙利算法果断的TLE了,然后就百度了一下发现有一个 Hopcroft-Karp算法 不过这个算法网上描述的很少,而且都说的比较含糊不清,不过幸好搜到一个比较不错的课件,看了一上午总算有些明白怎么回事,以前是寻找一个增广路,这个是寻找所有的增广路,并且使用BFS进行分层,看…
题意:区间  加   变成定值 乘  区间查询:和 平方和 立方和 思路:超级超级超级麻烦的一道题  设3个Lazy 标记分别为  change 改变mul乘 add加  优先度change>mul>add因为改变了之后 前面的mul 和add都失效了 push_down的时候    如果有change 标记 可以很方便得求p[1] p[2] p[3] 如果mul存在  则也可以很方便求得子区间的各种值 同时由于mul 比add优先  要把add标记*=value  相当于本来每个加5  乘以…
题意: 给出范围 算出 满足  选取一个数中任一一个 树作为支点  两边的数分别乘以到中心的距离和 左和等于右和   的数有多少个 数位DP题 状态转移方程为dp[pos][x][state]=dp[pos-1][x][state-(pos-x)*i]  表示为pos位上的数字为 i    以x为支点  则  以中心点左为负右为正   pos左右的数乘以权值的 和为state pos-1位就是 把pos位的 i乘以权值减去   即 state-(pos-x)*i 如果枚举到最后一位的时候 sta…