题目描述

假定有一个无限长的数轴,数轴上每个坐标上的数都是0。

现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。

近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。

输入格式

第一行包含两个整数n和m。
接下来 n 行,每行包含两个整数x和c。
再接下里 m 行,每行包含两个整数l和r。

输出格式

共m行,每行输出一个询问中所求的区间内数字和。

数据范围

−109≤x≤109,
1≤n,m≤105,
−109≤l≤r≤109,
−10000≤c≤10000

输入样例:

3 3
1 2
3 6
7 5
1 3
4 6
7 8

输出样例:

8
0
5

思路:标准的离散化,给的数据和范围很大,但总共也只有n个数,所以可以给这n这数就行重新编号。
代码如下:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1e6 + 10;
typedef long long ll;
typedef pair<int, int> p;
int a[N], sum[N];
p arr[N], query[N];
int n ,m;
vector<int>alls;   //重新编号
int Find(int x)     //查找x对应的编号
{int l = 0, r = alls.size() - 1;while(l < r){int mid = l + r >> 1;if(alls[mid] >= x)r = mid;else l = mid + 1;}return r + 1; //编号从一开始
}
int main()
{int l ,r ;cin >>n >> m;for(int i = 0; i < n; i++){cin >> arr[i].first >> arr[i].second;alls.push_back(arr[i].first);}for(int i = 0; i < m; i++){cin >> l >> r;query[i].first = l;query[i].second = r;alls.push_back(l);alls.push_back(r);}//重新编号:去重和排序sort(alls.begin(), alls.end());alls.erase(unique(alls.begin(), alls.end()), alls.end());  for(int i = 0; i < n; i++){int x = Find(arr[i].first);a[x] += arr[i].second;}for(int i = 1; i <= alls.size(); i++)sum[i] = sum[i - 1] + a[i];for(int i = 0; i < m; i++){int l = Find(query[i].first);int r = Find(query[i].second);cout << sum[r] - sum[l - 1] << endl;}return 0;
}

802. 区间和(离散化)相关推荐

  1. CodeForces - 1285E Delete a Segmen(线段树+区间合并+离散化)

    题目链接:点击查看 题目大意:给出n个线段代表集合,现在问若可以将其中任意一个线段删除,则能够形成最多多少个独立的集合(取并集后) 题目分析:看到区间不难想到线段树了,虽然这个题也可以用stl贪心做, ...

  2. POJ - 2528 (线段树区间染色 + 离散化)

    mle了30来发 花了两个半小时 终于找到bug a了这题 a了之后不知道该开心还是该骂自己sb 题目思路 题目挺简单的就是区间染色 最后统计总区间的颜色个数 因为区间数不算大 但是区间的端点值可以很 ...

  3. 【算法基础】离散化 AcWing 802. 区间和 (详细)

    传送门 C++还没入门,代码看了十多遍 ,补了点语法,终于ac了!! 前言 欢迎关注我的专栏,准备写完算法基础所有题解

  4. Codeforces 138C(区间更新+离散化)

    题意:有n棵树在水平线上,给出每棵树的坐标和高度,然后向左倒的概率和向右倒的概率,和为1,然后给出了m个蘑菇的位置,每一个蘑菇都有一个魔法值,假设蘑菇被压死了,也就是在某棵树[a[i] - h[i], ...

  5. 【BZOJ4653】区间,离散化+线段树

    Time:2016.08.09 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 当时打同步赛的时候 花了3h去做T3提答 大概玩了50分 回来看T1竟然是懵逼状态-- 想了一会,满脑 ...

  6. ACM-线段树区间更新+离散化

    区间更新与单点更新最大的不同就在于Lazy思想: http://blog.sina.com.cn/s/blog_a2dce6b30101l8bi.html 可以看这篇文章,讲得比较清楚 在具体使用上, ...

  7. AcWing 802. 区间和

    题目连接 https://www.acwing.com/problem/content/804/ 思路 用一个map用来映射我们的真实地址和逻辑地址,然后用一个map来存储真实地址的值,然后再单独开一 ...

  8. AcWing 算法基础课第三节基础算法3 双指针、位运算、离散化、区间合并

    1.该系列为ACWing中算法基础课,已购买正版,课程作者为yxc 2.y总培训真的是业界良心,大家有时间可以报一下 3.为啥写在这儿,问就是oneNote的内存不够了QAQ ACwing C++ 算 ...

  9. ACM入门之【离散化】

    离散化:就是说一些数据的数据范围很大,但是数据的个数很少.此时我们可以离散化一下. 将其对应的数字映射到一个较小的下标. 离散化的两种方法: 排序,去重 用哈希表来离散化 //好处是有序的 vecto ...

最新文章

  1. Cloudera Manager 5.3 和 CDH5.3.0 本地(离线)
  2. 加班最狠的城市竟然不是北京!
  3. java Map及其实现类的底层原理
  4. Sql Server之旅——第二站 理解万恶的表扫描
  5. 第十一章 Hibernate的查询 HQL面向对象的查询语言
  6. 0+到10+随机数+java_Java随机数总结
  7. 不仅仅是一种爱好:了解中国的电竞市场
  8. 计算机系统汉字编码分为,计算机中的汉字编码
  9. C++案例——联系人管理系统
  10. 万有引力的意思_详细解释万有引力的本质 - 物理 - 小木虫 - 学术 科研 互动社区...
  11. box-sizing属性的的用法
  12. 史上最详细bitbucket入门手册,手把手操作指南
  13. python dynamic
  14. 一个主机多显示器的操作方法
  15. “你公众号被封了!”
  16. windows文件同步备份软件-文件夹同步工具哪个好?
  17. GIS开发:QGIS编辑矢量数据
  18. php手冊,php手冊之變量范圍
  19. 当window.opener无法调用时的原因与解决方案
  20. python 抢票代码 猫眼演出_python爬取猫眼票房的数据,遇到美团登录验证怎么办...

热门文章

  1. activiti6使用
  2. 统计英文文本的字母个数
  3. 使用Apriori算法和FP-growth算法进行关联分析
  4. 在控制台中操作MYSQL数据库步骤以及一些小问题
  5. 17年第八届蓝桥杯省赛(C语言B组) 题解
  6. 批处理文件中获取当前所在路径的几种方法,以及写文件到txt
  7. ubuntu 命令记忆
  8. 设计模式:单例模式7种写法
  9. 网络协议从入门到底层原理(7)网络安全 - 常见攻击、单向散列函数、对称加密、非对称加密、混合密码系统、数字签名、证书
  10. 【数据库系统设计】SQL语言实验