题意:给出n个数,m种操作,1 l r k ,修改[l, r] 区间内,比k小的为k, 2 l r k x,查询[l,r]区间内比k小的最小的x个数,少于k个输出-1.
http://www.lpoj.cn/problemdetail?problemID=5555
#include<bits/stdc++.h>
using namespace std;
const int maxn = 500005;
int n;
int a[maxn];
int m;
int f,aa,b,k,x;
int tree[maxn<<4];
int lazy[maxn<<4];
int pos[maxn<<4];
int ans[maxn];
struct node {
int l,r;
pair<int,int> v;
};
bool operator<(node a,node b) {
return a.v.first>b.v.first;
}
void pushup(int x) {
// tree[x] = min(tree[x<<1],tree[x<<1|1]);
if(tree[x<<1]<tree[x<<1|1]) {
tree[x] = tree[x<<1];
pos[x] = pos[x<<1];
} else {
tree[x] = tree[x<<1|1];
pos[x] = pos[x<<1|1];
}
}
void pushdown(int rt) {
tree[rt<<1] = max(tree[rt<<1],lazy[rt]);
tree[rt<<1|1] = max(tree[rt<<1|1],lazy[rt]);
lazy[rt<<1] = max