题目:戳这里

学习博客:戳这里

题意:有很多个活动,每个活动有持续天数,每个活动会在每天提供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 【线段树&树状数组】的更多相关文章

  1. codeforces 1017C - Cloud Computing 权值线段树 差分 贪心

    https://codeforces.com/problemset/problem/1070/C 题意: 有很多活动,每个活动可以在天数为$[l,r]$时,提供$C$个价格为$P$的商品 现在从第一天 ...

  2. CodeForces -163E :e-Government (AC自动机+DFS序+树状数组)

    The best programmers of Embezzland compete to develop a part of the project called "e-Governmen ...

  3. 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 ...

  4. [bzoj3196][Tyvj1730]二逼平衡树_树套树_位置线段树套非旋转Treap/树状数组套主席树/权值线段树套位置线段树

    二逼平衡树 bzoj-3196 Tyvj-1730 题目大意:请写出一个维护序列的数据结构支持:查询给定权值排名:查询区间k小值:单点修改:查询区间内定值前驱:查询区间内定值后继. 注释:$1\le ...

  5. 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 ...

  6. Buses and People CodeForces 160E 三维偏序+线段树

    Buses and People CodeForces 160E 三维偏序+线段树 题意 给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a ...

  7. CodeForces 877E DFS序+线段树

    CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身 ...

  8. [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)

    [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...

  9. [Codeforces 1199D]Welfare State(线段树)

    [Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...

随机推荐

  1. C#实现一个弹窗监控小程序

    一..实现弹窗淡入淡出等效果即弹窗自动关闭 技术要点: 1.弹窗效果(淡入淡出,自下而上滑入)使用WIN API实现 2.弹出的窗体在一定时间后,自动关闭使用一个timer实现,弹窗开始是,打开tim ...

  2. 关于安装版JDK1.8 1.7更改多个JDK环境变量 不生效

    配置maven(apache-maven-3.3.9)时提示异常:'mvn' 不是内部或外部命令,上网查找得知 它不支持jdk1.8,所以重新安装jdk1.7,后来就出现下面的问题 现象: 当使用安装 ...

  3. 阿里云VOD(一)

    一.阿里云视频点播 1.功能介绍 视频点播(ApsaraVideo VoD,简称VoD)是集视频采集.编辑.上传.媒体资源管理.自动化转码处理(窄带高清TM).视频审核分析.分发加速于一体的一站式音视 ...

  4. Jmeter5.1.1 把默认语言调整为中文

    进入安装目录:apache-jmeter-5.1.1\bin\ 找到 jmeter.properties文件 搜索" language=en ",前面带有"#" ...

  5. hive 时间相关的函数

    yyyy-MM-dd与yyyyMMdd000000转换的三种方法 方法一:date_format(只支持yyyy-MM-dd -> yyyyMMdd000000) select date_for ...

  6. The OAuth 2.0 Authorization Framework OAuth2.0的核心角色code 扫码登录

    RFC 6749 - The OAuth 2.0 Authorization Framework https://tools.ietf.org/html/rfc6749 The OAuth 2.0 a ...

  7. COGS 307 模拟退火

    307. [HAOI2006] 均分数据 ★★   输入文件:data.in   输出文件:data.out   简单对比时间限制:3 s   内存限制:128 MB [问题描述] 已知N个正整数:A ...

  8. 高性能数据导入方案&表过滤器&一对多支持筛选- .NET SqlSugar ORM

    一.数据导入有哪些难题 1.数据分类 你需要将 插入.更新.忽略不计.错误数据 等进么分类汇总,最后返回给客户,如果没有很好的设计想把这些操作一步到位非常的难 2.高性能 对于插入或者更新 肯定不能单 ...

  9. 详解Java8特性之新的日期时间 API

    详解Java8特性之新的日期时间 API http://blog.csdn.net/timheath/article/details/71326329 Java8中时间日期库的20个常用使用示例 ht ...

  10. Docker (一、dockerfile-node.js)

    1.基本说明 Dockfile是一个用于编写docker镜像生成过程的文件,其有特定的语法.在一个文件夹中,如果有一个名字为Dockfile的文件,其内容满足语法要求,在这个文件夹路径下执行命令:do ...