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. mac oxs 上查看进程监听的端口号 lsof

    sudo netstat -ltnp |grep xxx lsof -p 26917 | grep LISTEN https://mengkang.net/1090.html

  2. Spring Boot 集成 Swagger生成接口文档

    目的: Swagger是什么 Swagger的优点 Swagger的使用 Swagger是什么 官网(https://swagger.io/) Swagger 是一个规范和完整的框架,用于生成.描述. ...

  3. stdmap 用 at() 取值,如果 key 不存在,不好意思,程序崩溃。QMap 用 value()取值,如果 key 不存在,不会崩溃,你还可以指定默认值

    我觉得 Qt6 最应该升级的是容器类 stdmap 在遍历的时候,同时获取 key 与 value 非常方便: for(auto& var:map){    qDebug()<<v ...

  4. vue 的 solt 子组件过滤

    如上图: 1.定义了一个类似下拉的组件 mySelect , 然后里面有自定义的组件 myOptions 2.有很多时候,我们希望, mySelect 组件内部的子组件,只能是 myOptions . ...

  5. pfSense QoS IDS

    pfSense QoS IDS 来源 https://blanboom.org/2018/pfsense-setup/ 之前我使用的无线路由器是 RT1900ac,其内置了 QoS 和 IDS/IPS ...

  6. sublime text3上设置 python 环境

    1. 打开Sublime text 3 安装package control 2. 安装 SublimeREPL Preferences -> package control 或者Ctrl+shi ...

  7. 关于MQ的几件小事(五)如何保证消息按顺序执行

    1.为什么要保证顺序 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常.举例: 比如通过mysql binlog进行两个数据库的数据 ...

  8. JDK反编译的两种方式

    环境 链接:https://pan.baidu.com/s/1DwWj5Kt4Gfi68k_EOAea_Q 提取码:57j2 apktools+dex2jar+gd-gui 方式一: apktools ...

  9. BASIS小问题汇总1

    try to start SAP system but failed 2019-04-04 Symptom: when i tried to start SAP system, using the c ...

  10. Python排序算法(六)——归并排序(MERGE-SORT)

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10800699.html 一.归并排序(MERG ...