博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 1179C Serge and Dining Room 线段树
阅读量:5267 次
发布时间:2019-06-14

本文共 2393 字,大约阅读时间需要 7 分钟。

改变选的顺序, 最后的结果不变。

这种题一般都和前缀和有关, 建个线段树维护前缀和就好了。

#include
#define LL long long#define LD long double#define ull unsigned long long#define fi first#define se second#define mk make_pair#define PLL pair
#define PLI pair
#define PII pair
#define SZ(x) ((int)x.size())#define ALL(x) (x).begin(), (x).end()#define fio ios::sync_with_stdio(false); cin.tie(0);using namespace std;const int N = 1e6 + 7;const int inf = 0x3f3f3f3f;const LL INF = 0x3f3f3f3f3f3f3f3f;const int mod = 7340033;const double eps = 1e-8;const double PI = acos(-1);template
inline void add(T &a, S b) {a += b; if(a >= mod) a -= mod;}template
inline void sub(T &a, S b) {a -= b; if(a < 0) a += mod;}template
inline bool chkmax(T &a, S b) { return a < b ? a = b, true : false;}template
inline bool chkmin(T &a, S b) { return a > b ? a = b, true : false;}int n, m, a[N], b[N];const int maxVal = 1000000;#define lson l, mid, rt << 1#define rson mid + 1, r, rt << 1 | 1struct segmentTree { int lazy[N << 2], mx[N << 2]; inline void pull(int rt) { mx[rt] = max(mx[rt << 1], mx[rt << 1 | 1]); } inline void push(int rt) { if(lazy[rt]) { lazy[rt << 1] += lazy[rt]; lazy[rt << 1 | 1] += lazy[rt]; mx[rt << 1] += lazy[rt]; mx[rt << 1 | 1] += lazy[rt]; lazy[rt] = 0; } } void update(int L, int R, int val, int l = 1, int r = maxVal, int rt = 1) { if(R < l || r < L || R < L) return; if(L <= l && r <= R) { mx[rt] += val; lazy[rt] += val; return; } push(rt); int mid = l + r >> 1; update(L, R, val, lson); update(L, R, val, rson); pull(rt); } int query(int l = 1, int r = maxVal, int rt = 1) { if(mx[rt] <= 0) return -1; if(l == r) return l; push(rt); int mid = l + r >> 1; if(mx[rt << 1 | 1] > 0) return query(rson); else return query(lson); }} Tree;int main() { scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) scanf("%d", &a[i]); for(int i = 1; i <= m; i++) scanf("%d", &b[i]); for(int i = 1; i <= n; i++) { Tree.update(1, a[i], 1); } for(int i = 1; i <= m; i++) { Tree.update(1, b[i], -1); } int q; scanf("%d", &q); while(q--) { int op, p, x; scanf("%d%d%d", &op, &p, &x); if(op == 1) { Tree.update(1, a[p], -1); a[p] = x; Tree.update(1, a[p], 1); } else { Tree.update(1, b[p], 1); b[p] = x; Tree.update(1, b[p], -1); } printf("%d\n", Tree.query()); } return 0;}/**/

 

转载于:https://www.cnblogs.com/CJLHY/p/11102793.html

你可能感兴趣的文章
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
Ubuntu下面安装eclipse for c++
查看>>
让IE浏览器支持CSS3圆角属性的方法
查看>>
巡风源码阅读与分析---nascan.py
查看>>
LiveBinding应用 dataBind 数据绑定
查看>>
Linux重定向: > 和 &> 区别
查看>>
nginx修改内核参数
查看>>
C 筛选法找素数
查看>>
TCP为什么需要3次握手与4次挥手(转载)
查看>>
IOC容器
查看>>
Windows 2003全面优化
查看>>
URAL 1002 Phone Numbers(KMP+最短路orDP)
查看>>
web_day4_css_宽度
查看>>