(尺取法)HDU

摘要:
Pid=5806主题含义:给你一个m和一个k,找出n个元素的数列中有多少个区间的最大值大于或等于m,如果后一个值小于或等于原始k最大值,则k最大值保持不变。但我不知道如何第一次满足要求。已经很久了。无需考虑其他问题。这样,它就成为一种非常标准的规则方法。

原题链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5806


题意:

给你一个m和k,求在n个元素的数列里有多少个区间的第k大的值大于等于m。


分析:

又是区间题,但是这题一看就感觉是尺取法。我们可以发现一个规律,如果一个区间存在第k大大于等于m,那每次加进新的值,也就是扩大区间的时候,如果后一个值小于等于原来的第k大,那么第k大不变。如果插入的数比原来的第k大大,那么新的第k大肯定比原来的第k大大,肯定满足条件,所以说只要枚举每一个起点,找到第一次满足第k大的值大于等于m,后面的剩余的区间都满足。但是感觉不知道怎么跑到第一次满足条件,坑了好久。

无意中听到学长的讨论,才发现自己还是想复杂了,确切的说是思维定势了,其实可以转个弯,要求有多少个区间的第k大值大于等于m,第一次满足条件只需要考虑,存在k个值大于等于m。
其他都无需考虑。这样就变成了一个非常标准的尺取法。代码非常短。


代码:

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<vector>
 5 #include<set>
 6 #include<map>
 7 #include<algorithm>
 8 #include<string>
 9 #include<queue>
10 #include<cmath>
11 #include<stack>
12 #include<cctype>
13 #include<list>
14 
15 
16 #define ll long long
17 #define ull unsigned long long
18 
19 using namespace std;
20 
21 const int maxn=200010;
22 const int inf=1<<30;
23 
24 ll num[maxn];
25 
26 
27 int main()
28 {
29     //#define DEBUG
30 
31 #ifdef DEBUG
32     freopen("in.txt","r",stdin);
33     //freopen("out.txt","w",stdout);
34 #endif
35 
36     int t;
37     scanf("%d",&t);
38     while(t--){
39         int n,m,k;
40         scanf("%d%d%d",&n,&m,&k);
41         for(int i=0;i<n;i++){
42             scanf("%I64d",&num[i]);
43         }
44         ll ans=0,res=0;
45         int l=0,r=0;
46         if(num[0]>=m)res++;
47         for(;r<n;){
48             while(res<k){
49                 r++;
50                 if(r>=n)break;
51                 if(num[r]>=m){
52                     res++;
53                 }
54             }
55             while(res>=k){
56                 ans+=n-r;
57                 if(num[l]>=m){
58                     res--;
59                 }
60                 l++;
61             }
62         }
63         printf("%I64d
",ans);
64     }
65     return 0;
66 }
 

免责声明:文章转载自《(尺取法)HDU》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇继电器通过工业网关实现远程控制功能Python urllib和urllib2模块学习(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

PLSQL常用配置之窗口/版面保存、SQL格式化/美化、SQL注释去掉注释等快捷键配置、登陆历史修改配置

//Blog.csdn.net/eyeidolon/article/details/8251791 PLSQL常用配置的快捷键配置,如窗口/布局保存、SQL格式化/美化和SQL注释删除,以及登录历史修改1的配置。PL/SQLDeveloper记住登录密码当使用PL/SQLDeveloper时,默认情况下PL/SQLDeveloper会执行此窗口中的所有SQL...

SqlServer数据库存入decimal类型数据注意事项

对于sqlserver,Decimal可用于存储具有小数点和固定值的值。与浮点和实数不同,十进制用于存储近似值。目的是满足精确数学运算的需要。它是最大和最精确的浮点数字类型。对于十进制类型,请注意必须指定精度;否则,十进制只能存储为整数,就像int一样。例如,十进制是存储长度为18位和小数点后2位的数据。...

C# Winform Treeview控件

WinformTreeview控件目录手动添加节点。丰富节点数据并清除所有节点信息。选择指定的节点。函数GetAllTreeNodeWinformTreeview控件手动添加节点//在根节点下添加根节点和子节点TreeNodeCollectionRoot=treeView1.Nodes;TreeNodecurNode=根。添加(“良好”);curN(电流)...

input框输入金额处理的解决办法

最近,已经启动的项目在删除输入输入量时突然出现问题。各种在线搜索都没有找到你想要的。今天,我将以react框架为例进行代码贡献。我会写下需求和解决方案,希望对我的朋友有用。如果有更好的方法实现它,请给我一些建议!”在“:”下;n=数学。防抱死制动系统;vars=“”;对于{s+=.replace;}S=S||“整数”;n=数学。地板对于{varp=“”;对于...

狼人杀规则

自爆后,所有演讲立即暂停,进入夜间。自爆后的那晚,狼人可以指着那把刀。预言家只能验证某个玩家是否是狼人,除狼人是否是狼人之外的所有信息都无法验证。如果先知测试丘比特,法官不必担心丘比特是哪一个阵营,只会展示好人的手势。...

微信小程序通过background-image设置背景图片

微信小程序通过背景图像设置背景:仅支持在线图像和base64图像,不支持本地图像;设置base64图像的步骤如下:1.在网站上http://imgbase64.duoshitong.com/将图片转换为base64格式2的文本。在WXSS中使用上述文本:background image:url(“data:image/png;base64,iVBORw0KG...