https://www.luogu.org/problemnew/show/T15368

区间修改,区间查询k(<= 10)大值

应该也可以用分块写

#include <cstdio>
#include<algorithm>
#include<iostream>
#include<cstring> #define N 100010
#define tq getchar() using namespace std; struct Note {
long long nm[];
int top;
Note() {memset(nm,,sizeof(nm));top = ;}
} note[N << ],zero_;
long long lazy[N << ];
int n, m; inline int read(){
int x = ; char c = tq;
while(c < '' || c > '') c = tq;
while(c >= '' && c <= '') x = x * + c - '', c = tq;
return x;
} inline Note mer(Note a, Note b) {
if(a.top == ) return b;
if(b.top == ) return a;
Note ans;
int ln = ,rn = ;
while(ln < a.top && rn < b.top) {
if(a.nm[ln] > b.nm[rn]) {ans.nm[ans.top] = a.nm[ln]; ln ++;}
else {ans.nm[ans.top] = b.nm[rn]; rn ++;}
ans.top ++;
if(ans.top == )break;
}
while(ln < a.top) {
if(ans.top == ) break;
ans.nm[ans.top] = a.nm[ln];
ans.top ++;
ln ++;
}
while(rn < b.top) {
if(ans.top == ) break;
ans.nm[ans.top] = b.nm[rn];
ans.top ++;
rn ++;
}
return ans;
} inline void Update(int now) {note[now] = mer(note[now << ],note[now << | ]);} inline void pushdown(int now) {
if(lazy[now]) {
lazy[now << ] += lazy[now];
lazy[now << | ] += lazy[now];
int lson = now << ;
int rson = now << | ;
for(int i = ; i < note[lson].top; i++) note[lson].nm[i] += lazy[now];
for(int i = ; i < note[rson].top; i++) note[rson].nm[i] += lazy[now];
lazy[now] = ;
}
} void build(int l, int r, int now) {
if(l == r) {
note[now].top = ;
note[now].nm[] = read();
return;
}
int mid = (l + r) >> ;
build(l, mid, now << );
build(mid + , r, now << | );
Update(now);
} Note query(int l, int r, int now, int ln, int rn) {
if(l > rn || r < ln) return zero_;
if(l >= ln && r <= rn) return note[now];
pushdown(now);
int mid = (l + r) >> ;
Note lx = query(l, mid, now << , ln, rn);
Note rx = query(mid + , r, now << | , ln, rn);
return mer(lx,rx);
} void add(int l, int r, int now, int ln, int rn, int v) {
if(l > rn || r < ln) return;
if(l >= ln && r <= rn) {
lazy[now] += v;
for(int i = ; i < note[now].top; i++) note[now].nm[i] += v;
return;
}
pushdown(now);
int mid = (l + r) >> ;
add(l, mid, now << , ln, rn, v);
add(mid + , r, now << | , ln, rn, v);
Update(now);
} int main()
{
n = read();
m = read();
build(,n,);
while(m--){
int op = read();
if(op == ) {
int l = read(),r = read(),k = read();
Note zz = query(, n, , l, r);
if(zz.top < k) printf("-1\n");
else cout << zz.nm[k - ] <<"\n";
}
if(op == ) {int l = read(), r = read(), v = read(); add(, n, , l, r, v);}
}
return ;
}

[Zhx] 无题的更多相关文章

  1. zhx and contest (枚举  + dfs)

    zhx and contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. zhx's contest (矩阵快速幂 + 数学推论)

    zhx's contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  3. HDU - 5187 - zhx&#39;s contest (高速幂+高速乘)

    zhx's contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  4. HDOJ 5188 zhx and contest 贪婪+01背包

    zhx and contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  5. HDU - 5186 - zhx&#39;s submissions (精密塔尔苏斯)

    zhx's submissions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. HDU 5186 zhx&#39;s submissions (进制转换)

    Problem Description As one of the most powerful brushes, zhx submits a lot of code on many oj and mo ...

  7. 【HDU5187】zhx's contest

    [问题描述] 作为史上最强的刷子之一,zhx的老师让他给学弟(mei)们出n道题.zhx认为第i道题的难度就是i.他想要让这些题目排列起来很漂亮. zhx认为一个漂亮的序列{ai}下列两个条件均需满足 ...

  8. HDU5187 zhx's contest

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission ...

  9. HDU 1871 无题

    无题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

随机推荐

  1. Lucene入门+实现

    Lucene简介详情见:(https://blog.csdn.net/Regan_Hoo/article/details/78802897) lucene实现原理 其实网上很多资料表明了,lucene ...

  2. Challenge & Growth —— 从这里开始

    做有挑战的事情,就从这里开始. 忘记这本书现在在哪儿了,以前还以为能祖祖辈辈留传,现在只能借助 Nowcoder 了.Now coder,Forever thinker. 想以自以为最优美的 code ...

  3. Codeforces Round #415 (Div. 1) (CDE)

    1. CF 809C Find a car 大意: 给定一个$1e9\times 1e9$的矩阵$a$, $a_{i,j}$为它正上方和正左方未出现过的最小数, 每个询问求一个矩形内的和. 可以发现$ ...

  4. shell 学习笔记3-shell变量扩展

    一.特殊位置参数变量 1.特殊位置参数变量 在shell中比如:$0.$1.$#,等被称为特殊位置参数变量,当命令行.函数.脚本执行等处传递参数时,就需要使用位置参数变量 参数说明如下: 2.示例$1 ...

  5. 节日营销!这样搞-App运营日常

    节日送礼需求日益增长,当儿女们有了购买需求的时候,商家如何突出重围,成为孝子们的首选?如何做好节日营销?几个经验分享一下: 1.抓住节日特色 结合节日风格特色,营造节日气氛,如母亲节这种节日,主要体现 ...

  6. IO模型之AIO代码及其实践详解

    一.AIO简介 AIO是java中IO模型的一种,作为NIO的改进和增强随JDK1.7版本更新被集成在JDK的nio包中,因此AIO也被称作是NIO2.0.区别于传统的BIO(Blocking IO, ...

  7. dnmp安装

    centos7.2.box下载地址 链接: https://pan.baidu.com/s/1ny20PN2x7YuA6dwYA-P0yQ 提取码: wrdk 1 下载centos.box 新建dnm ...

  8. Guava【google】

    Guava 是什么? Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库.这个库是为了方便编码,并减少编码错误.这个库提供用于集合,缓存,支持原语,并发性,常见注解, ...

  9. FastDateFormat日期工具类

    原文:https://blog.csdn.net/u013823538/article/details/80197476 public class DateUtil { public static f ...

  10. 使用python控制nginx禁封ip

    python控制nginx禁封ip nginx中的access.log最近有大量的用户访问,怎么样屏蔽掉在一定时间段内访问次数多的ip呢? 测试准备: 两个tomcat,一个nginx做均衡负载,服务 ...