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. JSON & 虚拟列

    什么是虚拟列? 在MySQL 5.7中,支持两种Generated Column,即Virtual Generated Column和Stored Generated Column,前者只将Gener ...

  2. Spring Boot使用@ConfigurationProperties注解获取配置文件中的属性值

    注意:这种方式要提供属性的getter/setter方法—— 如果idea报错,提示没有相应的执行器,就需要在maven中添加: (虽然不配置代码也能正常运行,作用在下面会说明) 配置了该执行器后,在 ...

  3. hdu 1242 不用标记数组的深搜

    #include<stdio.h>#include<string.h>char mapp[220][220];int m,n,mmin;void dfs(int x,int y ...

  4. ajax实现文件上传,多文件上传,追加参数

    1.html部分实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  5. vue 鼠标移入移出事件执行多次(尤其ie)

    来自:https://www.cnblogs.com/myfirstboke/p/9150809.html  侵删 <p @mouseover="over($event)" ...

  6. uni-app 入门之 nvue (weex) 爬坑记

    前言 uni-app 是 DCloud 出品的新一代跨端框架,可以说是目前跨端数最多的框架之一了,目前支持发布到:App(Android/iOS).H5.小程序(微信小程序/支付宝小程序/百度小程序/ ...

  7. Thinkphp中的assign() 和 display()

    说到 $this->assign()  与 $this->display()想必用过TP框架的都不陌生,那么今天我们就来说说他们的作用及其他用法. 先说 $this->assign( ...

  8. S3C2440 gpio

    WATCHDOG TIMER 原理图 手册 举例 start.S .globl _start _start: /* 关看门狗 */ /* 往WTCON(0x53000000)写0 */ ldr r0, ...

  9. sql server统计总成绩和排名

    这里的图片可以拖拽到一个新页面查看原图!!!! 这里有两个表,需要查询总成绩和排名 Sql语句: select ST.name,SE.Chinese,SE.Math,SE.English, ( SE. ...

  10. centos 安装 kibana

    因为我本机安装的 elasticsearch 是 6.2.4 版本,所以kibana也要安装对应的 6.2.4 版本 wget https://artifacts.elastic.co/downloa ...