当前位置:网站首页>CF780G Andryusha and Nervous Barriers
CF780G Andryusha and Nervous Barriers
2022-07-30 13:40:00 【With a cool moon】
CF780G Andryusha and Nervous Barriers
考虑树套树.
One-dimensional maintenance interval column,Another dimension maintains the height of the ball on the column,Make sure the points are correct.
maintenance single point,区间查.
The situation when the scan line height is maintained to each board from large to small.
优化:The interval check is to judge that the minimum height of the interval ball can only pass through the baffle and end.
时间复杂度 O ( n log 2 n ) \mathcal O(n\log^2n) O(nlog2n).
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
#define ha putchar(' ')
#define he putchar('\n')
inline int read() {
int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-')
f = -1;
c = getchar();
}
while (c >= '0' && c <= '9')
x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
return x * f;
}
inline void write(int x) {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9)
write(x / 10);
putchar(x % 10 + 48);
}
const int _ = 1e5 + 10, mod = 1e9 + 7;
int h, w, n, N;
ll ans[_ << 2];
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q[_];
struct abc {
int u, l, r, s;
bool operator < (const abc &t) const {
return u > t.u;
}
} k[_];
void build(int o, int l, int r) {
if (l == r) {
q[l].push({
h + 1, 1});
ans[o] = h + 1;
return;
}
int mid = (l + r) >> 1;
build(o << 1, l, mid), build(o << 1 | 1, mid + 1, r);
ans[o] = min(ans[o << 1], ans[o << 1 | 1]);
}
void upd(int o, int l, int r, int pos, int p, int h) {
if (l == r) {
q[l].push({
h, p});
ans[o] = min(ans[o], (ll)h);
return;
}
int mid = (l + r) >> 1;
if (pos <= mid) upd(o << 1, l, mid, pos, p, h);
else upd(o << 1 | 1, mid + 1, r, pos, p, h);
ans[o] = min(ans[o << 1], ans[o << 1 | 1]);
}
int qry(int o, int l, int r, int L, int R, int h, int s) {
if (ans[o] > h + s) return 0;
if (l == r) {
int res = 0;
while (!q[l].empty() && q[l].top().first <= h + s) {
res = (res + q[l].top().second) % mod;
q[l].pop();
}
ans[o] = q[l].empty() ? 1e10 + 7 : q[l].top().first;
return res;
}
int mid = (l + r) >> 1, res = 0;
if (L <= mid) res = qry(o << 1, l, mid, L, R, h, s);
if (R > mid) res = (res + qry(o << 1 | 1, mid + 1, r, L, R, h, s)) % mod;
ans[o] = min(ans[o << 1], ans[o << 1 | 1]);
return res;
}
signed main() {
h = read(), w = read(), n = read();
for (int i = 1; i <= n; ++i) k[i].u = read(), k[i].l = read(), k[i].r = read(), k[i].s = read();
N = w;
build(1, 1, w);
sort(k + 1, k + n + 1);
for (int i = 1; i <= n; ++i) {
int t = qry(1, 1, w, k[i].l, k[i].r, k[i].u, k[i].s);
N = (N + t) % mod;
if (k[i].l == 1) upd(1, 1, w, k[i].r + 1, (t << 1) % mod, k[i].u);
else if (k[i].r == w) upd(1, 1, w, k[i].l - 1, (t << 1) % mod, k[i].u);
else {
upd(1, 1, w, k[i].l - 1, t, k[i].u);
upd(1, 1, w, k[i].r + 1, t, k[i].u);
}
}
write(N), he;
return 0;
}
边栏推荐
- 程序员修炼之道:务以己任,实则明心——通向务实的最高境界
- 20220729 证券、金融
- CF338E Optimize!
- shell script flow control statement
- ARC117E Zero-Sum Ranges 2
- Analysis of AI recognition technology and application scenarios of TSINGSEE intelligent video analysis gateway
- 展厅全息投影所具备的三大应用特点
- 【23考研】408代码题参考模板——顺序表
- 如何判断自己是否适合IT行业?方法很简单
- 05 | login background: based on the password login mode (below)
猜你喜欢
How to display an Excel table in the body of an email?
js背景切换时钟js特效代码
What are the hard-core upgrades and applications that cannot be missed in Greenplum 6.0?
一本通循环结构的程序设计第一章题解(1)
展厅全息投影所具备的三大应用特点
el-table中el-table-column下的操作切换class样式
树形dp小总结(换根,基环树,杂七杂八的dp)
jsArray array copy method performance test 2207300040
OFDM 十六讲 3- OFDM Waveforms
PyQt5快速开发与实战 8.6 设置样式
随机推荐
干货分享:小技巧大用处之Bean管理类工厂多种实现方式
How to display an Excel table in the body of an email?
“12306” 的架构到底有多牛逼
学习笔记——七周成为数据分析师《第二周:业务》:业务分析指标
dolphinscheduler adds hana support
ARC117E Zero-Sum Ranges 2
学习笔记——七周成为数据分析师《第一周:数据分析思维》
程序员修炼之道:务以己任,实则明心——通向务实的最高境界
MQTT网关读取西门子PLC数据传输到阿里云平台案例教程
R语言时间序列数据算术运算:使用log函数将时间序列数据的数值对数化(平方、开平方、指数化等函数类似使用)
DeFi 巨头进军 NFT 领域 用户怎么看?
svg波浪动画js特效代码
canvas彩虹桥动画js特效
libudev manual
cpu / CS 和 IP
js背景切换时钟js特效代码
如何判断自己是否适合IT行业?方法很简单
There is a risk of water ingress in the battery pack tray and there is a potential safety hazard. 52,928 Tang DMs are urgently recalled
[PostgreSQL] - explain SQL analysis introduction
How to solve the problem that the page does not display the channel configuration after the EasyNVR is updated to (V5.3.0)?