CTU Open Contest 2016 Suspicious Samples(单调队列)
题目链接
http://codeforces.com/gym/101505/attachments
题目大意
按时间顺序给你n个点, 每个点有一个时间t, 和值v。
我们要把所有点和规定时间内所有点进行比较,如果符合则ans++
- 规定时间:题目有给定时间间隔tl, 规定时间就是当前去和其他点比较的点(简记为P)的时间-tl, 在此时间间隔内的点都加入比较列表
- 比较方法:如果操作是max, 那么我们要把比较列表中的最大值去和P的值进行比较,min,avg则是最小值和平均值
gt则P的值要大于列表中从以上操作得到的值,lt则是小于
思路
用单调队列去维护区间最值
代码
#include<bits/stdc++.h>
using namespace std;struct P
{int t, v;
}p[100005];
char c1[5], c2[5];
deque<P>dq;int main()
{int n;while(~scanf("%d", &n)){for(int i=0; i<n; ++i)scanf("%d %d", &p[i].t, &p[i].v);int c;scanf("%d", &c);for(int i=0; i<c; ++i){while(!dq.empty()) dq.pop_back();int tl, st, top = n-1, now = n-2, ans = 0;scanf("%s %s %d", c1, c2, &tl);if(c2[1] == 'a') {while(top != 0){while(now >= 0 && p[now].t >= p[top].t - tl){while(!dq.empty() && dq.back().v < p[now].v) dq.pop_back();dq.push_back(p[now--]);}if(!dq.empty() && c1[0] == 'g' && p[top].v > dq.front().v) ++ans;else if(!dq.empty() && c1[0] == 'l' && p[top].v < dq.front().v) ++ans;if(dq.front().t == p[top-1].t) dq.pop_front();--top;if(now == top) --now;}}else if(c2[1] == 'i'){while(top != 0){while(now >= 0 && p[now].t >= p[top].t - tl){while(!dq.empty() && dq.back().v > p[now].v) dq.pop_back();dq.push_back(p[now--]);}if(!dq.empty() && c1[0] == 'g' && p[top].v > dq.front().v) ++ans;else if(!dq.empty() && c1[0] == 'l' && p[top].v < dq.front().v) ++ans;if(dq.front().t == p[top-1].t) dq.pop_front();--top;if(now == top) --now;}}else if(c2[1] == 'v'){long long av = 0, al = 0;while(top != 0){while(now >= 0 && p[now].t >= p[top].t - tl){++al;av += p[now--].v;}if(al && c1[0] == 'g' && (long long)p[top].v*(1ll)*al > av) ++ans;else if(al && c1[0] == 'l' && (long long)p[top].v*(1ll)*al < av) ++ans;if(al){av -= p[--top].v;--al;if(now == top) --now;}else{--top;--now;}}}printf("%d\n", ans);}}return 0;
}
总结
队列中可能会没有元素,这时候没有答案
这也是单调队列常见bug
CTU Open Contest 2016 Suspicious Samples(单调队列)相关推荐
- hdu 3706 Second My Problem First 单调队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...
- hdu 3401(单调队列优化dp)
注意:这题题意是有操作的天数相隔要大于w 然后列出状态转移方程就可以发现,可以用优点队列优化啦. 构造状态dp[i][j]表示第i 天拥有 j只股票的时候,赚了多少钱 状态转移有: 1.从前一天不买不 ...
- 牛客练习赛79E-小G的数学难题【dp,单调队列】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11169/E 题目大意 给出nnn个三元组(ai,bi,ci)(a_i,b_i,c_i)(ai,bi,ci ...
- 【2019牛客暑期多校训练营(第三场)- F】Planting Trees(单调队列,尺取)
题干: 链接:https://ac.nowcoder.com/acm/contest/883/F 来源:牛客网 The semester is finally over and the summer ...
- 【BZOJ1758】重建计划,点分治+单调队列
Time:2016.08.21 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: UPD 2017.1.18 之前的思路删掉了,因为写的太烂,纯属放屁 刚刚知道新加了一组数据,所以原先 ...
- 【BZOJ3831】Little Bird,单调队列优化DP
Time:2016.08.05 Author:xiaoyimi 转载注明出处谢谢 传送门(权限题) 思路: 被Yveh莫名其妙拉过去做水题权限题 有一排n棵树,第i棵树的高度是Di. MHY要从第一棵 ...
- HDU 6319(单调队列)
传送门 题面: Problem A. Ascending Rating Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 524288/ ...
- Codeforces Round #466 (Div. 2): E. Cashback(单调队列+DP)
题目链接:http://codeforces.com/contest/940/problem/E 题意:给你一个长为n的序列和一个数字c,你要将这个序列切成若干段,对于每一段,这段中最小的[n/c]个 ...
- CF #669 (Div. 2)D. Discrete Centrifugal Jumps(线段树/单调队列优化dp)
https://codeforces.com/contest/1407/problem/D 题意:给定n个高度,当i<ji<ji<j且满足以下条件之一时,可以从iii跳到jjj: 问 ...
最新文章
- 2020秋季-人工神经网络课程报告
- SD-WAN和MPLS有什么用途?
- php 如何设计索引_Mysql学习浅谈mysql的索引设计原则以及常见索引的区别
- 阿里巴巴Java开发手册终极版
- Linux 命令之 userconf -- 设置用户账号
- SQL SERVER2008 存储过程、表、视图、函数的权限
- 常见的php 字符串函数,php 常用字符串函数总结
- 《敏捷可执行需求说明 Scrum提炼及实现技术》—— 3.5 小结
- VS2012安装部署教程
- 大疆无人机飞控系统的原理、组成及各传感器的作用
- 【matplotlib】plot()kind参数表
- 大学计算机专业课教师听课评语,教师听课评语
- Prisma(一)——基础
- 《富兰克林自传》读后感:从这个接地气的伟人身上我们可以学到什么?
- Vue过滤器filter和filters的使用详解
- redux 常见问题
- Android——SVG图片转成安卓能用的vector矢量图
- 微卡认证系统使用手册
- 第十五周翻译-《Pro SQL Server Internals, 2nd edition》
- 编程课python和c+对中高考_编程要进入高考了。
热门文章
- 简述C#中IO的应用
- linux程序注释生成器,Doxygen—程序文档生成工具
- 移动App下载量SEO优化
- 小程序使用canvas绘画、签名。wx.canvasToTempFilePath安卓机生成图片背景色为黑色
- hiho 	大礼堂地毯(strstr 查找函数)
- 手机上安装ubuntu21.04
- Proteus报错:External model DLL “ADC083X.DLL“ not found. GLE=0x000036B1
- 基于内容的图片检索CBIR简介
- python opencv写视频——cv2.VideoWriter()
- 一键备份脚本backup.sh