知识
map数组遍历下标从1开始
其实map就差不多相当于一个可以开很大的桶。
map的特点:
1、存储Key-value对
2、支持快速查找,查找的复杂度基本是Log(N)
3、快速插入,快速删除,快速修改
multimap特性以及用法与map完全相同,唯一的差别在于允许重复键值的元素插入容器.
例题
【51nod】和为k的连续区间
分析
map存储前缀和是s的数的下标。
每次判断有没有前缀和是sum-k的。
上代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
map<long long,int> a;
pair<int,int> ans;
int n,k,x;
long long sum;
int main()
{
cin>>n>>k;
ans.first=n+1;
a[0]=1;
for(int i=1;i<=n;i++)
{
cin>>x;
sum+=x;
if(!a[sum])
{
a[sum]=i+1;
}
if(a[sum-k]&&a[sum-k]<ans.first)
{
ans.first=a[sum-k];
ans.second=i;
}
}
if(ans.first>n) cout<<"No Solution";
else cout<<ans.first<<' '<<ans.second;
return 0;
}