秋实大哥与小朋友

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

秋实大哥以周济天下,锄强扶弱为己任,他常对天长叹:安得广厦千万间,大庇天下寒士俱欢颜。

所以今天他又在给一群小朋友发糖吃。

他让所有的小朋友排成一行,从左到右标号。在接下去的时间中,他有时会给一段区间的小朋友每人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

WA了两次,第一次询问的时候没有用离散化之后的值,第二次发现数组开小了。。。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
#include<cstdio> using namespace std;
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1|1
const int N = + ;
typedef long long LL;
struct node{
int p, l, r, v;
node(){}
node(int p, int l, int r, int v): p(p), l(l), r(r), v(v){}
node(int p, int v): p(p), v(v){}
}Node[N];
LL sum[N << ], add[N << ]; vector<int> X; void PushDown(int rt, int m){
if(add[rt]){
add[rt << ] += add[rt];
add[rt << |] += add[rt];
sum[rt << ] += (LL)add[rt]*(m - (m >> ));
sum[rt << |] += (LL)add[rt]*(m >> );
add[rt] = ;
}
}
void Build(int l, int r, int rt){
add[rt] = sum[rt] = ;
if(l == r) return;
int m = (l + r) >> ;
Build(lson);
Build(rson);
} void Updata(int L, int R, int c, int l, int r, int rt){
if(L <= l && r <= R){
add[rt] += c;
sum[rt] += (LL)c*(r - l + );
return;
}
PushDown(rt, r - l + );
int m = (l + r) >> ;
if(L <= m) Updata(L, R, c, lson);
if(R > m) Updata(L, R, c, rson);
} LL Query(int p, int l, int r, int rt){
if(l == r) return sum[rt];
PushDown(rt, r - l + );
int m = (l + r) >> ;
if(p <= m) return Query(p, lson);
return Query(p, rson);
} int Binary(int x){
return distance(X.begin(), lower_bound(X.begin(), X.end(), x));
} int dic(){
sort(X.begin(), X.end());
X.erase(unique(X.begin(), X.end()), X.end());
return X.size() - ;
}
int main(){
int n, m, p, l, r, c;
scanf("%d %d", &n, &m);
for(int i = ; i <= m; i++){
scanf("%d", &p);
if( p == ){
scanf("%d", &c);
X.push_back( c );
Node[i] = node(p, c);
}else{
scanf("%d %d %d", &l, &r, &c);
X.push_back( l );
X.push_back( r );
Node[i] = node(p, l, r, c);
}
}
int k = dic();
Build(, k, );
for(int i = ; i <= m; i++){
if(Node[i].p == ){
l = Binary(Node[i].l);
r = Binary(Node[i].r);
c = Node[i].v;
Updata(l, r, c, , k, );
}else{
c = Binary(Node[i].v);
printf("%lld\n", Query(c, , k, ));
}
}
}

UESTC-1059 秋实大哥与小朋友(离散化+线段树)的更多相关文章

  1. UESTC 1059 - 秋实大哥与小朋友

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1059 Time Limit: 3000/1000MS (Java/Others)     Memory Li ...

  2. [UESTC1059]秋实大哥与小朋友(线段树, 离散化)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1059 普通线段树+离散化,关键是……离散化后建树和查询都要按照基本法!!!RE了不知道多少次………………我真 ...

  3. CDOJ 1059 秋实大哥与小朋友 STL(set)+离散化+BIT区间更新单点查询

    链接: A - 秋实大哥与小朋友 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Subm ...

  4. 2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化

    秋实大哥与小朋友 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Desc ...

  5. UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>

    A - 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  6. UESTC 1061 秋实大哥与战争 线段树区间合并

    秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 男儿何不带吴钩, ...

  7. uestc 1073 秋实大哥与线段树 Label:线段树

    秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) “学习本无底, ...

  8. UESTC 1074 秋实大哥搞算数 栈模拟

    秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  9. UESTC - 1057 秋实大哥与花 线段树

    题意 秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前. 所以秋实大哥精心照料了很多花朵.现在所有的花朵排成了一行,每朵花有一个愉悦值. 秋实大哥每天要对着某一段连续的花朵歌唱,然后这些花朵的愉 ...

随机推荐

  1. zabbix 磁盘自动发现脚本

    ##需要在zabbix界面配置宏变量===>正则来匹配磁盘 disk_discovery.sh ———————————————————————————————————————————————— ...

  2. C++ - 操作运算符

    一.操作运算符 操作运算符:在C++中,编译器有能力将数据.对象和操作符共同组成表达式,解释为对全局或成员函数的调用 该全局或成员函数被称为操作符函数,程序员可以通过重定义函数操作符函数,来达到自己想 ...

  3. Codeforces 960F Pathwalks ( LIS && 树状数组 )

    题意 : 给出若干个边,每条边按照给出的顺序编号,问你找到一条最长的边权以及边的编号同时严格升序的一条路径,要使得这条路径包含的边尽可能多,最后输出边的条数 分析 :  这题和 LIS 很相似,不同的 ...

  4. HDU 2795 Billboard (线段树单点更新 && 求区间最值位置)

    题意 : 有一块 h * w 的公告板,现在往上面贴 n 张长恒为 1 宽为 wi 的公告,每次贴的地方都是尽量靠左靠上,问你每一张公告将被贴在1~h的哪一行?按照输入顺序给出. 分析 : 这道题说明 ...

  5. ArrayList类源码浅析(一)

    1.首先来看一下ArrayList类中的字段 可以看出,ArrayList维护了一个Object数组,默认容量是10,size记录数组的长度: 2.ArrayList提供了三个构造器:ArrayLis ...

  6. CentOS 7 安装wps2019

    1. download https://www.wps.cn/product/wpslinux 2. rpm 安装缺少lib包,于是yum 安装 .x86_64.rpm 3.安装完成,运行的时候又报错 ...

  7. 案例ORA-00600: internal error code, arguments: [qkaffsindex3], [], [], [], []

    执行更新统计信息语句: exec dbms_stats.gather_schema_stats(ownname=>'LIVE_KS',degree=>2,cascade=>true, ...

  8. ppapi,npapi

    PPAPI也就是Pepper Plugin API,是在原有网景NPAPI(Netscape Plugin API)基础上发展而来的.NPAPI是当今最流行的插件架构,几乎所有浏览器都支持,不过存在很 ...

  9. sensu

    https://blog.csdn.net/enweitech/article/details/53763324

  10. sed将一个文件插入到另一个文件(合并两个文件)

    将before.sh的内容插入到catalina.sh的第一行之后 sed -i '1r /srv/tomcat8/bin/before.sh' /srv/tomcat8/bin/catalina.s ...