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. oracle随笔之提示“ORA-01002: 提取违反顺序”

    如果存储过程中有插入语句并且没有写COMMIT的话在调试时会提示:“ORA-01002: 提取违反顺序”

  2. HttpClient 远程接口调用方式

    远程接口调用方式HttpClient 问题:现在我们已经开发好了接口了,那该如何调用这个接口呢? 答:使用Httpclient客户端.   Httpclient简介 什么是httpclient Htt ...

  3. Arm-Linux 移植 FFMPEG库 + x264

      背景: ffmpeg 中带有264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx26 ...

  4. 简单即时通讯、聊天室--java NIO版本

    实现的功能: 运行一个服务端,运行多个客户端.在客户端1,发送消息,其余客户端都能收到客户端1发送的消息. 重点: 1.ByteBuffer在使用时,注意flip()方法的调用,否则读取不到消息. 服 ...

  5. Java连接Jira,创建、修改、删除工单信息

    还不了解Jira是什么的同学可以看一下这篇文章:https://www.cnblogs.com/wgblog-code/p/11750767.html 本篇文章主要介绍如何使用Java操作Jira,包 ...

  6. vue组件间的数据传递

    父组件向子组件传递数据 在 Vue 中,可以使用 props 向子组件传递数据.   App.vue HelloWorld.vue 在子组件部分: 如果需要从父组件获取 logo 的值,就需要使用 p ...

  7. Intellij的Terminal框里输入npm无效

    Intellij的Terminal框里输入npm无效,解决办法: 1.安装node.js的时候选择全部安装: 2.在intellij的file->settings->Tools->T ...

  8. SDL图解

    1.什么是SDL 2.为什么要用SDL 3.SDL由哪几个阶段组成 用于规范公司web应用开发流程:安全需求分析.代码检查.安全测试... 4.微软的SDL实施流程

  9. sql 四舍五入 保留两位小数

    一.问题描述 数据库里的 float momey 类型,都会精确到多位小数.但有时候 我们不需要那么精确,例如,只精确到两位有效数字. 二.sqlserver解决方案: 1. 使用 Round() 函 ...

  10. 每日一题-——LeetCode(111)二叉树的最小深度

    题目描述: 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 思路一: 把每一层的结点加入到队列,每一层i+1,到下一层时,把上一层在队列中的结点都弹出,按从 ...