【非原创】codeforces 1070C Cloud Computing 【线段树&树状数组】
题目:戳这里
学习博客:戳这里
题意:有很多个活动,每个活动有持续天数,每个活动会在每天提供C个CPU每个CPU价格为P,问需要工作N天,每天需要K个CPU的最少花费。
解题思路:遍历每一天,维护当前天K个cpu的最小花费。具体方法是维护两个线段树(树状数组也可以),维护每一天可以使用的cpu数和价格*cpu数的前缀和。注意数组下标是价格(1e6的数组。
(不明白的话可以看代码,代码思路很清晰
附学习博客的代码:
1 #include <iostream>
2
3 #include <algorithm>
4
5 #include <string.h>
6
7 #include <vector>
8
9 #include <memory.h>
10
11 #include <bitset>
12
13 #include <map>
14
15 #include <deque>
16
17 #include <math.h>
18
19 #include <stdio.h>
20
21 using namespace std;
22
23 typedef long long int ll;
24
25 const int MAXN = 1000005;
26
27
28
29 ll num[MAXN<<2];
30
31 ll sum[MAXN<<2];
32
33 int N;
34
35 void pushup(int rt){
36
37 num[rt]=num[rt<<1]+num[rt<<1|1];
38
39 sum[rt]=sum[rt<<1]+sum[rt<<1|1];
40
41 }
42
43
44
45 void update(int P,int C,int l,int r,int rt){
46
47 if(l==r){
48
49 num[rt]+=C;
50
51 sum[rt]+=1ll*P*C;
52
53 return;
54
55 }
56
57
58
59 int m=(l+r)/2;
60
61
62
63 if(P<=m)
64
65 update(P,C,l,m,rt<<1);
66
67 else
68
69 update(P,C,m+1,r,rt<<1|1);
70
71 pushup(rt);
72
73 }
74
75
76
77 ll query(int K,int l,int r,int rt){
78
79
80
81 if(l==r){
82
83 //不到K个
84
85 if(l==MAXN){
86
87 return 0;
88
89 }
90
91 if(K>0)
92
93 {
94
95 return 1ll*K*l;
96
97 }
98
99 else
100
101 return 0;
102
103 }
104
105 int m=(l+r)/2;
106
107 if(num[rt<<1]>=K){
108
109 return query(K,l,m,rt<<1);
110
111 }
112
113 else{
114
115 return sum[rt<<1]+query(K-num[rt<<1],m+1,r,rt<<1|1);
116
117 }
118
119 }
120
121
122
123 vector<pair<int,int> > C[MAXN];//第i天加入的活动
124
125 vector<pair<int,int> > O[MAXN];//第i天结束的活动
126
127
128
129 int main()
130
131 {
132
133 int K,M;
134
135 scanf("%d%d%d",&N,&K,&M);
136
137
138
139 int l,r,c,p;
140
141 for(int i=0;i<M;i++){
142
143 scanf("%d%d%d%d",&l,&r,&c,&p);
144
145 C[l].push_back(make_pair(p,c));//加入的活动
146
147 O[r].push_back(make_pair(p,c));//退出的活动
148
149 }
150
151
152
153 ll ans=0;
154
155 for(int i=1;i<=N;i++){
156
157 //新活动加入
158
159 for(int j=0;j<C[i].size();j++)
160
161 update(C[i][j].first,C[i][j].second,1,MAXN,1);
162
163 ans+=query(K,1,MAXN,1);
164
165 //活动结束
166
167 for(int j=0;j<O[i].size();j++)
168
169 update(O[i][j].first,-O[i][j].second,1,MAXN,1);
170
171 }
172
173 cout<<ans<<endl;
174
175
176
177 return 0;
178
179 }
【非原创】codeforces 1070C Cloud Computing 【线段树&树状数组】的更多相关文章
- codeforces 1017C - Cloud Computing 权值线段树 差分 贪心
https://codeforces.com/problemset/problem/1070/C 题意: 有很多活动,每个活动可以在天数为$[l,r]$时,提供$C$个价格为$P$的商品 现在从第一天 ...
- CodeForces -163E :e-Government (AC自动机+DFS序+树状数组)
The best programmers of Embezzland compete to develop a part of the project called "e-Governmen ...
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem E (Codeforces 831E) - 线段树 - 树状数组
Vasily has a deck of cards consisting of n cards. There is an integer on each of the cards, this int ...
- [bzoj3196][Tyvj1730]二逼平衡树_树套树_位置线段树套非旋转Treap/树状数组套主席树/权值线段树套位置线段树
二逼平衡树 bzoj-3196 Tyvj-1730 题目大意:请写出一个维护序列的数据结构支持:查询给定权值排名:查询区间k小值:单点修改:查询区间内定值前驱:查询区间内定值后继. 注释:$1\le ...
- Codeforces Round #225 (Div. 1) C. Propagating tree dfs序+ 树状数组或线段树
C. Propagating tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/383/p ...
- Buses and People CodeForces 160E 三维偏序+线段树
Buses and People CodeForces 160E 三维偏序+线段树 题意 给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a ...
- CodeForces 877E DFS序+线段树
CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身 ...
- [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)
[Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...
- [Codeforces 1199D]Welfare State(线段树)
[Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...
随机推荐
- Podinfo,迷你的 Go 微服务模板
项目介绍 Podinfo 是一个用 Go 制作的小型 web 应用程序,它展示了在 Kubernetes 中运行微服务的最佳实践. 它已实现的技术指标(截选自官方 README.md ): 里面每一 ...
- linux opt, usr文件夹说明
linux下各文件夹介绍: https://www.pathname.com/fhs/pub/fhs-2.3.html /usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为 ...
- centos7制作U盘启动盘-九五小庞
一.准备相关软件 1.8G以上U盘 2.UltraISO虚拟光驱(试用版即可)最新版 下载地址:https://cn.ultraiso.net/xiazai.html 点击下载试用 3.CentOS ...
- ubuntu更新下载软件卡住0% [Connecting to archive.ubuntu.com (2001:67c:1360:8001::23)]
一台ubuntu系统,查看硬件和配置环境的时候发现下载卡住了 根据提示就是有ipv6地址,系统也是配置了ipv6地址的.海外机器,而且可以ping通域名 最佳解决方案 我想出了如何让apt-get再次 ...
- Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)
一,引言 之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中.然后 ...
- Centos7 Nginx 安装
下载地址:http://nginx.org/download/nginx-1.18.0.tar.gz 1.准备工作 #安装gcc yum install gcc-c++ #安装pcre pcre-de ...
- tarjan 复习笔记 割点与桥
定义分析 给定一个无向连通图\(G=(V,E)\) 对于\(x\in Y\),如果删去\(x\)及与\(x\)相连的边后,\(G\)分裂为两个或者两个以上的不连通子图,那么称\(x\)为\(G\)的割 ...
- Java性能优化,操作系统内核性能调优,JYM优化,Tomcat调优
文章目录 Java性能优化 尽量在合适的场合使用单例 尽量避免随意使用静态变量 尽量避免过多过常地创建Java对象 尽量使用final修饰符 尽量使用局部变量 尽量处理好包装类型和基本类型两者的使用场 ...
- 小白搭建WAMP详细教程---php安装与设置
一.php官网下载php压缩包 到php官网http://www.php.net 下载,有很多版本,我们这里选择7.2.25,具体步骤如下: 二.php的安装 下载后得到如下的压缩包,将压缩包解压到您 ...
- 痞子衡嵌入式:恩智浦MCUX SDK在GitHub上线了
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是恩智浦MCUX SDK 在GitHub上线一事. 其实在差不多一个月前(2021年1月6日),恩智浦MCUX SDK就在GitHub悄悄上 ...