九度 oj 题目1554:区间问题
来源:互联网 发布:笙声入心网络剧百度云 编辑:程序博客网 时间:2024/05/17 23:03
http://ac.jobdu.com/problem.php?pid=1554
copy from http://blog.csdn.net/u013491262/article/details/21406351
把sum[1~i] = sum[i], sum[i] 是以a[i]为最后一个元素的前缀和,
Map以前缀和为key, 具有相同的前缀和的idx的vector 为value。
查找是以sum[i-1]+k 的key查找, 复杂度为O(logn) 找到后,找第一个比i大的那个idx。
#include <cstdio>#include <vector>#include <map>#include <cstring>using namespace std;#define inone(i) scanf("%d",&i)#define rep(i,j,k) for(int i=j;i<=k;i++)#define ms(x,y) memset(x,y,sizeof(x))const int maxn = 2e6 + 10;map<int, vector<int> > idxs;int c[maxn], n, k, a, flag;int main(){while (inone(n) != EOF){ms(c, 0);idxs.clear();rep(i, 1, n){inone(a);c[i] = c[i - 1] + a;idxs[c[i]].push_back(i);}inone(k);flag = 0;rep(i, 0, n-1){if (idxs.find(c[i] + k) == idxs.end()) continue;vector<int> vI = idxs[c[i] + k];rep(j, 0, vI.size()-1) {if (vI[j] >= i + 1) {printf("%d %d\n", i + 1, vI[j]);flag = 1; break;}}if (flag) break;}if(!flag) printf("No\n");} return 0;}
0 0
- 九度OJ题目1554:区间问题
- 九度 oj 题目1554:区间问题
- 九度 OJ 1554 区间问题
- 九度oj 1554 区间问题
- 九度:题目1554:区间问题
- 【九度】题目1554:区间问题
- 九度OJ 区间问题
- 九度 OJ 1554:区间问题 (set +前缀 +map)
- 九度oj 题目1544:数字序列区间最小值
- 九度oj 题目1152 点菜问题
- 九度oj 题目1104:整除问题
- 九度OJ 题目1006:ZOJ问题
- 九度OJ 题目1152:点菜问题
- 九度 oj 题目1104:整除问题
- 九度 oj 题目1006:ZOJ问题
- 九度 oj 题目1552:座位问题
- 九度 oj 题目1549:货币问题
- 九度OJ 题目1496:数列区间 (线段树 区间合并 +成段更新)
- java 三大框架 介绍
- 史上最全的MonkeyRunner自动化测试从入门到精通(2)
- python 模拟websocket通信
- 界面的简单跳转
- 我觉得很奇怪
- 九度 oj 题目1554:区间问题
- WebSocket使用教程-带完整实例
- 数字金额转中文大写(到亿)
- 【SysML】模型图概览
- python常用方法
- maven mvn常用命令
- 订单处理
- C++命名空间 namespace的作用和使用解析
- PLSQL连接oracle数据库配置