题目:戳这里

学习博客:戳这里

题意:有很多个活动,每个活动有持续天数,每个活动会在每天提供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. ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-国际化,本地化,多语言应用

    开篇 早年写过一篇多语言的应用 :   本地化(多语言)   讲述了如何创建多语言的资源文件,并利用资源文件来获得页面和请求的语言属性 本次补充这篇文章,的原因是在实际项目中,有多种需要多语言的情况 ...

  2. Effective Java, 3e阅读笔记一

    引言 本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库,适用于任何具有实际Java工作经验的程序员. 本书一共90个条目,12章,每个条目讨论一条规则,这些规则反映了最有经验的优秀程序员 ...

  3. Java中,那些关于String和字符串常量池你不得不知道的东西

    老套的笔试题 在一些老套的笔试题中,会要你判断s1==s2为false还是true,s1.equals(s2)为false还是true. String s1 = new String("xy ...

  4. linux通过ntp同步时间

    1.安装服务 yum install ntp ##安装ntp服务,这个和ntpdate不一样哦,用这个比较好 systemctl start ntpd.service ###启动服务 systemct ...

  5. 删除HDFS中指定的文件。

    1 import java.text.SimpleDateFormat; 2 import java.util.Scanner; 3 4 import org.apache.hadoop.fs.Fil ...

  6. 给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。

    1 import java.text.SimpleDateFormat; 2 import org.apache.hadoop.fs.*; 3 4 public class E_RecursiveRe ...

  7. Server Tracking of Client Session State Changes Connection Management

    MySQL :: MySQL 8.0 Reference Manual :: 5.1.12 Connection Management https://dev.mysql.com/doc/refman ...

  8. Java SPI 与 Dubbo SPI

    SPI(Service Provider Interface)是JDK内置的一种服务提供发现机制.本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类.这样可以在运行时,动 ...

  9. Spring Boot 核心配置文件 bootstrap & application

    Spring Boot 核心配置文件 bootstrap & application 1.SpringBoot bootstrap配置文件不生效问题 2.bootstrap/ applicat ...

  10. Spring Cloud与Eureka

    Spring Cloud与Eureka 一.使用SpringCloud注册中心Eureka 1.1 Eureka和Zookeeper对比 1.1.1 Zookeeper保证CP 1.1.2 Eurek ...