HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464
免费送气球
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 264    Accepted Submission(s): 53
void solve(int Q, int type[], long long first[], long long second[]) {
    vector<long long> vec;
    for (int i = 0; i < Q; ++i) {
        if (type[i] == 1) {
            long long k = first[i], val = second[i];
            while (k--) {
                vec.push_back(val);
            }
        }
        else if (type[i] == 2) {
            sort(vec.begin(), vec.end());
            long long l = first[i] - 1, r = second[i], res = 0;
            while (l < r) {
                res = (res + vec[l++]) % 1000000007;
            }
            printf("%lld\n", res);
        }
    }
}
为防止你被JMC的代码搞到头晕目眩,JMC特意给出了问题的文字描述。已知一开始有一个空序列,接下来有Q次操作,每次操作给出type、first和second三个值。当type为1时,意味着该操作属于第一种操作:往序列尾部添加first个second数。当type为2时,意味着该操作属于第二种操作:查询序列中第first小至第second小的数值之和(一共有(second - first + 1)个数被累加),并将结果对1000000007取模后输出。
第一行一个Q(1 <= Q <= 1e5),代表Q次操作。
接下来有Q行,每行包含三个整数type、first和second;其中1 <= type <= 2。当type等于1时,0 <= first,second < 1e9。当type等于2时,1 <= first <= second,且first和second均不大于目前已添加进序列的数的数量。
解题思路:
理解学习一波主席树:https://blog.csdn.net/g21wcr/article/details/82970228
1操作正常建权值线段树,查询操作则是利用 前缀和作差的方法来求区间和。
AC code:
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const LL INF = 0x3f3f3f3f;
const LL MOD = 1e9+;
const int MAXN = 1e5+; LL sum[MAXN*], val[MAXN*];
int ls[MAXN*], rs[MAXN*];
int cnt; void update(int &Root, int L, int R, LL k, LL num)
{
if(!Root) Root = ++cnt;
sum[Root]+=k;
val[Root]+=(LL)k*num;
val[Root]%=MOD;
if(L == R) return;
int mid = (L+R)>>;
if(num <= mid) update(ls[Root], L, mid, k, num);
else update(rs[Root], mid+, R, k, num);
} LL query(int Root, int L, int R, LL k) //前 k 小的值的和
{
if(L == R) return 1LL*k*L%MOD;
int mid = (L+R)>>;
LL ans = ;
if(k > sum[ls[Root]])
ans = (val[ls[Root]] + query(rs[Root], mid+, R, k-sum[ls[Root]]))%MOD;
else
ans = query(ls[Root], L, mid, k); return ans%MOD;
} int main()
{
int Q_case, rt = ;
scanf("%d", &Q_case);
while(Q_case--){
int op;
LL L, R;
scanf("%d %lld %lld", &op, &L, &R);
if(op == ) update(rt, , 1e9, L, R);
else{
LL ans = (query(rt, , 1e9, R) - query(rt, , 1e9, L-)%MOD + MOD)%MOD; //类似于利用前缀和的差 来 求解区间的和
printf("%lld\n", ans);
}
}
return ;
}
HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)的更多相关文章
- HDU 6470 Count 【矩阵快速幂】(广东工业大学第十四届程序设计竞赛 )
		
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6470 Count Time Limit: 6000/3000 MS (Java/Others) ...
 - HDU 6464.免费送气球-动态开点-权值线段树(序列中第first小至第second小的数值之和)(感觉就是只有一个状态的主席树) (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
		
免费送气球 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
 - HDU 6467 简单数学题 【递推公式 && O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)
		
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others) M ...
 - HDU 6467.简单数学题-数学题 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
		
简单数学题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
 - HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
		
超级无敌简单题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
 - HDU 6462.人类史上最大最好的希望事件-递推 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
		
人类史上最大最好的希望事件 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
 - HDU - 5592 ZYB's Premutation (权值线段树)
		
题意:给出序列前k项中的逆序对数,构造出这个序列. 分析:使用权值线段树来确定序列元素. 逆序对的数量肯定是递增的,从最后一个元素开始逆向统计,则\(a[i] - a[i-1]\)即位置i之前比位置i ...
 - hdu 5592 ZYB's Premutation (权值线段树)
		
最近在线段树的世界里遨游,什么都能用线段树做,这不又一道权值线段树了么. ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others) Mem ...
 - HDU 5249:KPI(权值线段树)
		
KPI Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Desc ...
 
随机推荐
- PHP学习5——异常处理
			
主要内容: PHP错误类型 异常的产生 错误日志 日志信息记录到操作系统日志 异常处理 扩展异常处理类 PHP错误类型 语法错误 执行时错误 逻辑错误 异常的产生 如果安装了xampp之后,在php. ...
 - 行内元素的margin只能左右有效。上下无效。
			
行内元素的margin只能左右有效.上下无效.
 - JS将文件像form表单一样提交到后台
			
这是很简单.. HTML <div> <input type="file" id="myfile"> <input type=&q ...
 - 六、cent OS其它常用命令
			
进入根目录下的laycloud的目录cd /laycloud 进入当前目录下的目录cd laycloud 查看某个目录下的内容ls /laycloud 查看当前目录下的内容ls 查看当前目录下的内容读 ...
 - 关于request请求的基本获取
			
1.Request对象的作用是与客户端交互,收集客户端的Form.Cookies.超链接,或者收集服务器端的环境变量. request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的 ...
 - Spring 中任意位置获取 session 和 request
			
在web.xml中添加监听: <listener> <listener-class>org.springframework.web.context.ContextLoaderL ...
 - Toolbar和Drawerlayout的基本使用
			
参考文章: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2006.html http://www.codeceo.c ...
 - 将ojdbc 添加到maven
			
去oracle官网下载jar包 然后在jar包所在目录输入maven命令 mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdb ...
 - The method setItems(String) in the type ForTokensTag is not applicable for the arguments (Object)
			
1. 问题 看到这个错误以为是貌似jsp页面有误,c:forTokens标签用错了?? An error occurred at line: in the jsp file: /WEB-INF/pag ...
 - Java中避免空指针的几个方法
			
equals Object类中的equals 方法在非空对象引用上实现相等关系,具有对称性 x.equals(y) 和 y.equals(x) 结果是一样的,但当x == null时会抛出空指针异常 ...