法一:暴力$O({n^2})$看脸过

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[],sum[];
int main(){
int n,k;
cin>>n>>k;
for(int i=;i<=n;i++){ cin>>a[i];sum[i]=sum[i-]+a[i];}
bool flag=false;
for(int i=;i<n;i++){
for(int j=i+;j<=n;j++){
if(sum[j]-sum[i]==k){
cout<<i+<<" "<<j<<endl;
flag=true;
break;
}
}
if(flag) break;
}
if(!flag) cout<<"No Solution\n";
return ;
}

法二:map优化,存储sum数组的下标,复杂度$O(n\log n)$

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[],s[];
int main(){
map<ll,int>m;
ll n,k;
cin>>n>>k;
for(ll i=;i<=n;i++){ cin>>a[i];s[i]=s[i-]+a[i];}
for(ll i=n;i>=;i--) m[s[i]]=i;
bool ok=false;
ll l,r;
m[]=;
for(ll i=;i<=n;i++){ if(s[i]-k==&&!ok) l=,r=i,ok=true; else if(m[s[i]-k]){
if(m[s[i]-k]+>i) continue;
if(!ok) l=m[s[i]-k]+,r=i,ok=true;
else{
if(m[s[i]-k]+<l) l=m[s[i]-k]+,r=i;
else if(m[s[i]-k]+==l) r=min(r,i);
}
}
}
if(!ok) cout<<"No Solution\n";
else cout<<l<<" "<<r<<endl; return ;
}

法三:二分复杂度$O(n\log n)$,特别注意二分时的判断条件,很容易出错,idx和sum不可以一起判断,只能判断完sum,再独自判断idx,否则答案会出错

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
ll sum,idx;
}a[];
ll b[];
ll n,k;
bool cmp(node &a,node &b){
return (a.sum<b.sum)||(a.sum==b.sum&&a.idx<b.idx);
}
ll erfen(int p,int id){
ll l=,r=n;
while(l<r){
ll mid=(l+r)>>;
if(a[mid].sum>=p) r=mid;
else l=mid+;
}
return r;
}
int main(){
cin>>n>>k;
for(ll i=;i<=n;i++){
cin>>a[i].sum;
a[i].sum+=a[i-].sum;
a[i].idx=i;
b[i]=a[i].sum;
}
bool flag=false;
sort(a+,a+n+,cmp);
for(ll i=;i<=n;i++){
ll p=b[i-]+k;
ll idx=erfen(p,i);
while(a[idx].idx<i) idx++;
if(a[idx].sum==p){
cout<<i<<" "<<a[idx].idx<<endl;
flag=true;
break;
}
}
if(!flag) cout<<"No Solution\n";
return ; }

[51nod1094]和为k的连续区间的更多相关文章

  1. 51nod 1094 和为k的连续区间【前缀和/区间差/map】

    1094 和为k的连续区间 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 一整数数列a1, a2, ... , an(有正有负),以及另一个整数k ...

  2. 1094 和为k的连续区间(暴力)

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间[i, j],(1 ...

  3. 51Nod 1094 和为k的连续区间 | 水

    Input示例 6 10 1 2 3 4 5 6 Output示例 1 4 #include "cstdio" #include "algorithm" #in ...

  4. 区间sum 和为k的连续区间-前缀和

    区间sum 描述 有一个长度为n的正整数序列a1--an,candy想知道任意区间[L,R]的和,你能告诉他吗? 输入 第一行一个正整数n(0<n<=1e6),第二行为长度为n的正整数序列 ...

  5. 51Nod 1094 和为k的连续区间

    #include <iostream> #include <algorithm> #include <cstring> using namespace std; t ...

  6. 51Nod 和为k的连续区间

    一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间[i, j],(1 <= i <= j <= n),使得a[i] + ... + a[j] = k ...

  7. [BZOJ 1112] [POI2008] 砖块Klo 【区间K大】

    题目链接:BZOJ - 1112 题目分析 枚举每一个长度为k的连续区间,求出这个区间的最优答案,更新全局答案. 可以发现,这个区间的所有柱子最终都变成这k个数的中位数时最优,那么我们就需要查询这个区 ...

  8. codeforce-191E-Thwarting Demonstrations(树状数组+二分+离散)

    题意: 求第K 大连续区间 分析: 二分答案,再n * log(n)判断有几个区间的区间和大于mid,然后调整上下界,使这个值不断的接近k. 判断符合条件的区间总数:线性扫描sum[n](前n项和) ...

  9. UVALive 8519 Arrangement for Contests 2017西安区域赛H 贪心+线段树优化

    题意 等价于给一个数列,每次对一个长度为$K$的连续区间减一 为最多操作多少次 题解: 看样例猜的贪心,10分钟敲了个线段树就交了... 从1开始,找$[i,i+K]$区间的最小值,然后区间减去最小值 ...

随机推荐

  1. python微信库 --- itchat

    python实现微信接口——itchat模块 安装 pip install itchat 登录 itchat.auto_login() # 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短 ...

  2. chorme 插件

    json-handle: json可视化工具 开发中需要用到json,在浏览器显示的json非常乱,难以理解.有没有让人一目了然的工具,让json看起来非常直观呢,json-handle随之而出,包含 ...

  3. Java多线程系列 JUC线程池01 线程池框架

    转载  http://www.cnblogs.com/skywang12345/p/3509903.html 为什么引入Executor线程池框架 new Thread()的缺点 1. 每次new T ...

  4. kafka常用的shell命令

    kafka常用shell命令: ------------------------------------ 1.创建topic bin/kafka-topics.sh --create --zookee ...

  5. 算法(Algorithms)第4版 练习 2.1.27

    package com.qiusongde; import edu.princeton.cs.algs4.StdOut; public class Exercise2127 { public stat ...

  6. F1 score,micro F1score,macro F1score 的定义

    F1 score,micro F1score,macro F1score 的定义 2018年09月28日 19:30:08 wanglei_1996 阅读数 976   本篇博客可能会继续更新 最近在 ...

  7. Spark- 数据清洗

    输入输出转化工具类 package com.rz.mobile_tag.log import org.apache.spark.sql.Row import org.apache.spark.sql. ...

  8. 五 Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  9. L104

    marsh:It was like my own marsh country, flat and monotonous.The government will take more measures t ...

  10. codeforces 615E Hexagons (二分+找规律)

    E. Hexagons time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...