WUST OJ 2057: 第K大子串和
来源:互联网 发布:赵氏孤儿知乎 编辑:程序博客网 时间:2024/05/18 15:54
2057: 第K大子串和
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Description
给出一个长度为N 的序列,有M次询问,每次询问第K大的子串(连续的子序列)之和
Input
多组测试数据
每组数据一行为N,表示序列的长度 (N <= 10000)
第二行有N个数A1 A2 … An用空格隔开,表示序列中的数( 0 <= Ai <= 10000)
接下来一行有一个数M,表示询问的次数(M<=100)
接下来M行,每行一个正整数K( K<= N*(N-1)/2 )
Output
输出一个数表示第K大的子串和
Sample Input
4
1 2 3 2
2
1
2
Sample Output
8
7
蛮好的一个题。
思路:二分枚举子串和,利用尺取判断其是不是第k大。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,a[10001];int lenka(int mid){ int sum=a[0],begin=0,end=0,k=0; while(end<n) { if(sum>=mid) { k+=n-end; sum-=a[begin]; begin++; if(begin>end) { end=begin; sum=a[begin]; } } else { end++; sum+=a[end]; } } return k;}int main(){ int T,k,up,low,mid,QWQ; while(scanf("%d",&n)!=EOF) { int ma=0,mi=10000; for(int i=0;i<n;i++)scanf("%d",&a[i]),ma+=a[i],mi=min(mi,a[i]); scanf("%d",&T); while(T--) { scanf("%d",&k); up=ma,low=mi; mid=(up+low)/2; while(up>=low) { mid=(up+low)/2; QWQ=lenka(mid); //printf("有%d个比%d大\n",QWQ,mid); if(QWQ>=k)low=mid+1; else up=mid-1; } printf("%d\n",up); } } return 0;}
阅读全文
1 0
- WUST OJ 2057: 第K大子串和
- String CF 128B 第k大子串
- wust oj
- 求第k大连续区间和/第k大子序列和 - 二分+树状数组+前缀和(或主席树+堆)
- k大子段和 二分答案 + 平衡树
- WUST OJ 1506: 药丸
- WUST OJ 1552: Stock
- [K大子串 后缀自动机 模板题] BZOJ 3998 [TJOI2015]弦论
- wust oj 1251 报数游戏
- WUST OJ 1482:find clouds
- WUST OJ 2051: Big Boss
- WUST OJ 2055: 黑白棋
- WUST OJ 1966: 整数转换
- WUST OJ 1498: Wavio序列
- WUST OJ 1579 Camellia(数位dp)
- WUST OJ 1373: 世界上只有10种人
- wust oj 1496: yj&&jy->Mobile
- WUST OJ 1349 TLE(简单DP)
- Unity_杂项_访问修饰符在Unity监控面板的表现_050
- Linux下批量kill多个进程的方法
- 题目描述 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空
- HDU
- Burp Suite扫描器漏洞扫描功能介绍及简单教程
- WUST OJ 2057: 第K大子串和
- Mybatis配置文件优化
- java的取整函数
- luogu1280 尼克的任务(dp)
- HDU
- HDU 1060 Leftmost Digit
- webpack的使用(4) ---- 配置文件详解
- 对于web前端的基础简介;
- 数据结构 c语言实现链式循环队列(输入数字入队 输入字母出队)