CDOJ1059-秋实大哥与小朋友
秋实大哥与小朋友
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
秋实大哥以周济天下,锄强扶弱为己任,他常对天长叹:安得广厦千万间,大庇天下寒士俱欢颜。
所以今天他又在给一群小朋友发糖吃。
他让所有的小朋友排成一行,从左到右标号。在接下去的时间中,他有时会给一段区间的小朋友每人vv颗糖,有时会问第xx个小朋友手里有几颗糖。
这对于没上过学的孩子来说实在太困难了,所以你看不下去了,请你帮助小朋友回答所有的询问。
Input
第一行包含两个整数nn,mm,表示小朋友的个数,以及接下来你要处理的操作数。
接下来的mm行,每一行表示下面两种操作之一:
0 l r v : 表示秋实大哥给[l,r]这个区间内的小朋友每人v颗糖1 x : 表示秋实大哥想知道第x个小朋友手里现在有几颗糖
1≤m,v≤1000001≤m,v≤100000,1≤l≤r≤n1≤l≤r≤n,1≤x≤n1≤x≤n,1≤n≤1000000001≤n≤100000000。
Output
对于每一个11 xx操作,输出一个整数,表示第xx个小朋友手里现在的糖果数目。
Sample input and output
Sample Input | Sample Output |
---|---|
3 4 0 1 3 1 1 2 0 2 3 3 1 3 |
1 4 |
解题思路:乍一看题目很简单,但是数据规模太大,所以需要使用到离散化。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;
#define maxn 200005
set<int>jud;
long long tr[maxn];
int point[maxn];
//是否可以改掉,只用set而不用再开一个数组?
int size = 0;
struct operate
{int op, l, r, v;operate(int op, int l, int r, int v){this->op = op; this->l = l;this->r = r; this->v = v;}
};
queue<operate>operque;
void update(int l, int r, int val)
{for (int i = r; i > 0; i -= i&(-i))tr[i] += val;for (int i = l - 1; i > 0; i -= i&(-i))tr[i] += (-val);
}
long long query(int idx)
{long long sum = 0;while (idx <= size){sum += tr[idx];idx += idx&(-idx);}return sum;
}
int main()
{int l = 0, r = 0, x = 0;int n = 0, m = 0, bl = 0, v = 0;char op[10] = { '\0' };char fst[10] = { '\0' };memset(point, 0, sizeof(point));memset(tr, 0, sizeof(tr));gets(fst);sscanf(fst,"%d %d", &n, &m);while (m--){gets(op);if (op[0] == '0'){sscanf(op, "%d %d %d %d", &bl, &l, &r, &v);if (!jud.count(l)){jud.insert(l);point[++size] = l;}if (!jud.count(r)){jud.insert(r);point[++size] = r;}operque.push(operate(bl, l, r, v));}else if (op[0] == '1'){sscanf(op, "%d %d", &bl, &x);if (!jud.count(x)){jud.insert(x);point[++size] = x;}operque.push(operate(bl, 0, 0, x));}}sort(point + 1, point + 1 + size);while (!operque.empty()){operate temp = operque.front(); operque.pop();if (temp.op & 1){int pos = lower_bound(point + 1, point + 1 + size, temp.v) - point;printf("%lld\n", query(pos));}else{int left = lower_bound(point + 1, point + 1 + size, temp.l) - point;int right = lower_bound(point + 1, point + 1 + size, temp.r) - point;update(left, right, temp.v);}}return 0;
}
题目链接:点击打开链接http://acm.uestc.edu.cn/#/problem/show/1059
CDOJ1059-秋实大哥与小朋友相关推荐
- UESTC-1059 秋实大哥与小朋友(离散化+线段树)
秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- 线段树 (更新区间查询点)秋实大哥与小朋友
题目链接:https://vjudge.net/contest/186273#problem/D D - 秋实大哥与小朋友 Problem Description 秋实大哥以周济天下,锄强扶弱为己任, ...
- 2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化...
秋实大哥与小朋友 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Desc ...
- CDOJ 1059 秋实大哥与小朋友(离散化)
本文部分代码及思路来源于:http://www.cnblogs.com/Xiper/p/4470202.html 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Othe ...
- UESTC-1057 秋实大哥与花(线段树+成段加减+区间求和)
秋实大哥与花 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- E - 秋实大哥与战争
秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- CDOJ 1070 秋实大哥打游戏 带权并查集
链接 F - 秋实大哥打游戏 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit ...
- 2015 UESTC 数据结构专题H题 秋实大哥打游戏 带权并查集
秋实大哥打游戏 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...
- uestc 1073 秋实大哥与线段树 Label:线段树
秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) "学 ...
最新文章
- 四阶龙格库塔法的基本思想_SIR模型计算基本再生数R0
- java eclipse 内存_java – Eclipse 3.5.1使用大量内存
- python graphql query返回一组字典数据_Python的sqlalchemy使用原生sql查询如何返回字典形式的数组?...
- c语言怎么编程dll,【C语言】编写的DLL注入工具
- Java - I/O
- JDK 8功能的可疑方面
- 企业微信_获取access_token
- 在高并发情况nginx的作用
- 第十六:Allure-pytest功能特性介绍
- B VUE系列 七:vue的脚手架项目是用webpack构建的本地服务环境,如何在手机上访问?...
- php表单提交 邮箱_PHP的一个基础知识 表单提交
- 方舟服务器后台一直显示正在重启,win10正在重新启动卡住如何解决_win10重启后一直显示正在重新启动的解决教程...
- 微信小程序上传图片解决方案+oss+后端代码
- 什么是SysWow64
- (PTA)数据结构(作业)8、期中测验
- 幻灯片放映时无法切换到下一张
- winwods 10 移动硬盘无法弹出
- 银联扫码支付及静态码回调验签
- 关于4K高清分辨率下,QOpenGLWidget无法完整绘制图像问题的解决
- css em弹性布局