CFGym 101505I 题解
一、题目链接
http://codeforces.com/gym/101505
二、题意
这题其实主要就是题意,理解题意后,就是水题了。我想了下,主要原因就是这几点:
1、题意太过英文化,很多句子不能和中文一对一翻译,导致理解出现偏差。
2、题意没讲清楚。对于每个测试样例,第一个数据是不用考虑的。这点题目没说,要是说了,估计这题过的人更多。
主要意思就是:给你N组数组,每组一个t和一个v,其实输入的t是递增的(严不严格无所谓)。再给M个询问,询问格式是:<大于或小于> <聚集函数> <时间>。比如:gt max 300,表示:对于第i(1<=i<=N)个数据,若它的时间是Ti,判断它的值Vi是否比[Ti - 300, Ti)这个区间内记录的数据的V的最大值还大。如果是,结果+1,然后输出有多少组这样的数据。对于每个询问都是如此。注意,第一组数据是不用考虑的。因为它前面没有数据。
三、思路
理解题意后,思路就很简单了。对于每个询问,循环遍历所有数据(从第2个开始),假设询问时间为t, 第i组数据的时间为Ti,找到大于等于Ti-t的时间所在下标j(可以通过二分找到,因为数据位置不会变,所以时间和值可以分开存,而不需要结构体。如果用结构体,就要手写lower_bound函数了),计算区间[j, i - 1)内的最大值、最小值或平均值。一维区间求最值,可以用线段树。
四、源代码
- #include<bits/stdc++.h>
- using namespace std;
- typedef pair<int, int> PII;
- ;
- int n, m;
- int tim[maxn], val[maxn], sum[maxn];
- << , );
- PII data[maxn << ];
- void update(int x, int v) {
- ;
- data[_t].first = data[_t].second = v;
- ; _t > ; _t >>= ) {
- data[_t].first = min(data[_t << ].first, data[_t << | ].first);
- data[_t].second = max(data[_t << ].second, data[_t << | ].second);
- }
- }
- void init() {
- ;
- ;
- m = _t;
- ; i < m << ; ++i)data[i] = INF;
- ; i <= n; ++i)update(i, val[i]);
- }
- PII query(, , int r = m) {
- if(y < l || x > r)return INF;
- else if(l >= x && r <= y)return data[root];
- else {
- ;
- PII left = query(x, y, root << , l, mid);
- PII right = query(x, y, root << | , mid + , r);
- return make_pair(min(left.first, right.first), max(left.second, right.second));
- }
- }
- int Max(int idx, int before, int type) {
- , tim + n + , tim[idx] - before) - tim;
- ? << : ;
- PII ans = query(j, idx - );
- return ans.second;
- }
- int Min(int idx, int before, int type) {
- , tim + n + , tim[idx] - before) - tim;
- ? << : ;
- PII ans = query(j, idx - );
- return ans.first;
- }
- double Avg(int idx, int before) {
- , tim + n + , tim[idx] - before) - tim;
- ] - sum[j - ]) / (1.0 * (idx - j));
- }
- int main() {
- ], op2[];
- while(~scanf("%d", &n)) {
- memset(sum, , sizeof(sum));
- memset(op1, '\0', sizeof(op1));
- memset(op2, '\0', sizeof(op2));
- ; i <= n; ++i)scanf("%d%d", &tim[i], &val[i]);
- ; i <= n; ++i)sum[i] = sum[i - ] + val[i];
- init();
- int q, before;
- scanf("%d", &q);
- while(q--) {
- scanf("%s%s%d", op1, op2, &before);
- ;
- ) {
- ) {
- ; i <= n; ++i)))++cnt;
- } ) {
- ; i <= n; ++i) if((double)val[i] > Avg(i, before))++cnt;
- } ) {
- ; i <= n; ++i)))++cnt;
- }
- } ) {
- ) {
- ; i <= n; ++i)))++cnt;
- } ) {
- ; i <= n; ++i)if((double)val[i] < Avg(i, before))++cnt;
- } ) {
- ; i <= n; ++i)))++cnt;
- }
- }
- printf("%d\n", cnt);
- }
- }
- }
- /*
- 5
- 4 16
- 9 49
- 46 93
- 55 16
- 62 55
- 8
- gt max 29
- lt avg 15
- gt min 34
- gt max 4
- lt min 44
- lt max 29
- gt max 42
- lt avg 10
- 10
- 60 30
- 120 28
- 180 35
- 240 34
- 300 40
- 360 31
- 420 28
- 480 2
- 540 42
- 600 30
- 2
- gt avg 7200
- lt min 300
- 8
- 1 10
- 5 30
- 10 50
- 15 45
- 20 55
- 25 40
- 30 30
- 35 20
- 6
- gt max 10
- gt avg 10
- gt min 10
- lt max 10
- lt avg 10
- lt min 10
- */
变量m是为设计线段树而定义的,因为n不会刚好是2的幂。
CFGym 101505I 题解的更多相关文章
- CFGym 101490J 题解
一.题目链接 http://codeforces.com/gym/101490 二.题面 三.题意 给你n个点,代表学生所在位置,n个点,代表老师所在位置.每个学生分配一个老师.让你找出一个最小的学生 ...
- CFGym 101490E 题解
一.题目链接 http://codeforces.com/gym/101490 二.题面 三.题意 给你一个图,n个点,m条边,一个x,从顶点1走到顶点n.假设从顶点1走到顶点n的最短路为d,x代表你 ...
- CFGym 101161I 题解
一.题目链接 http://codeforces.com/gym/101161/problem/I 二.题意 给定一棵树,一个初始的省会城市,若干个询问,0表示修改省会城市,1表示查询去省会必须经过指 ...
- CFGym 100198G 题解
一.题目链接 http://codeforces.com/gym/100198/problem/G 二.题意 看样例就能明白,写表达式解析器. 三 .思路 一看这题目,立马就会想到“后缀表达式”,考虑 ...
- CFGym 101194L 题解
一.题目链接 http://codeforces.com/gym/101194/problem/L 二.题意 有4个队伍,要打6场比赛(刚好每两个队伍都能相互比一次),若A和B比赛有3种结果: A赢B ...
- CFGym 101194D 题解
一.题目链接 http://codeforces.com/gym/101194/problem/D 二.题意 给定一个数字n和一个数字k,一个n个整数的序列,让你在里面找尽可能多的长度为k的符合“要求 ...
- CFGym 100211J 题解
一.题目 二.题意 给定一个字母表(最多也就是英文小写字母的前10个字母),一个交换表,两个字符串,判断字符串A能否通过交换表的交换方式变成字符串B. 三.思路 1.一开始,比赛时,我半模拟半记忆化地 ...
- [CF-GYM]Abu Tahun Mod problem题解
前言 这道题比较简单,但我还是想了好一会 题意简述 Abu Tahun很喜欢回文. 一个数组若是回文的,那么它从前往后读和从后往前读都是一样的,比如数组\(\left\{1\right\},\left ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
随机推荐
- Tinkoff Challenge - Elimination Round B. Igor and his way to work(dfs+优化)
http://codeforces.com/contest/793/problem/B 题意:一个地图,有起点和终点还有障碍点,求从起点出发到达终点,经过的路径上转弯次数是否能不超过2. 思路: 直接 ...
- a标签 在新页面打开
<a href="https://www.baidu.com/" target="_blank">下载</a>
- JavaScript--语法3--数组
JavaScript--语法3--数组 一.心得 二.代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "h ...
- bzoj1854: [Scoi2010]游戏 贪心
lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...
- poj2411 轮廓线dp裸题
题意:用12的骨牌覆盖nm的矩阵的方案数 题解:dp[i][j]表示枚举到了第i行,j状态的方案数,三种转移,向上的,要求不是第一行而且上面的没有覆盖过,向下的,要求不是第一列而且左边没有覆盖过,不放 ...
- [转]PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用
http://www.cnblogs.com/cxd4321/archive/2009/03/07/1405475.html 在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般 ...
- PHP和JAVA整合开发的三个方案(六)
php作为前端开发,java负责后台开发,这样取长补短的方案很适合现在web开发.现在PHP和JAVA整合开发比较好的方案只有3个:1.SOAP2.php-java-bridge3.Quercus Q ...
- 【hive】数据仓库层次设计
转载 https://www.jianshu.com/p/849db358ec61
- IIS7 部署 MVC3
IIS7 部署 MVC3 (2013-02-28 11:06:39) 转载▼ 标签: iis7 mvc3 it 分类: ASP.NET 在IIS7下部署MVC已经简化了许多,基本按照一般的项目部署即可 ...
- 字典序全排列(java实现)
import java.util.Arrays; /** *字典序全排列 *字符串的全排列 *比如单词"too" 它的全排列是"oot","oto&q ...