社区讨论
分块求卡常&&洛谷刚好卡在时限上的点是会T掉的
P3527[POI 2011] MET-Meteors参与者 6已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mmanbcol
- 此快照首次捕获于
- 2026/03/03 21:30 上周
- 此快照最后确认于
- 2026/03/06 21:30 4 天前
https://www.luogu.com.cn/record/265197470
CPP#include <bits/stdc++.h>
#define maxn 300010
using namespace std;
#define int long long
const int N = 3e5 + 5;
int n, m, r, k, block;
int a[N], e[N], bl[N], siz[N], of[N], tot[N], qwq[N], nxt[N], res[N];
vector<int> ve[N];
struct node
{
int l, r, k;
} q[N];
signed main()
{
cin >> n >> m;
for (register int i = 1; i <= m; i++)
{
int x;
cin >> x;
ve[x].push_back(i);
siz[x]++;
of[i] = x;
}
for (register int i = 1; i <= n; i++)
{
cin >> e[i];
}
cin >> k;
block = sqrt(k) * 2.5;
for (register int i = 1; i <= (k - 1) / block + 1; i++)
{
int l = (i - 1) * block + 1, r = min(k, i * block);
for (register int j = l; j <= r; j++)
{
cin >> q[j].l >> q[j].r >> q[j].k;
if (q[j].l > q[j].r)
{
qwq[q[j].l] += q[j].k, qwq[m + 1] -= q[j].k, qwq[1] += q[j].k, qwq[q[j].r + 1] -= q[j].k;
}
else
{
qwq[q[j].l] += q[j].k, qwq[q[j].r + 1] -= q[j].k;
}
}
for (register int j = 1; j <= m; j++)
{
nxt[j] = qwq[j];
nxt[j] += nxt[j - 1];
res[of[j]] += nxt[j];
}
for (register int u = 1; u <= n; u++)
{
int pt = res[u];
if (tot[u] || pt < e[u])
{
continue;
}
for (register int j = r; j >= l; j--)
{
for (register int xx = 0; xx < siz[u]; xx++)
{
if (q[j].l <= q[j].r)
{
if (q[j].l <= ve[u][xx] && ve[u][xx] <= q[j].r)
{
pt -= q[j].k;
}
}
else if (q[j].l <= ve[u][xx] || ve[u][xx] <= q[j].r)
{
pt -= q[j].k;
}
}
if (pt < e[u])
{
tot[u] = j;
break;
}
}
}
memset(res, 0, sizeof(res));
}
for(int i = 1; i <= n; i ++)
{
if (tot[i] == 0)
{
cout << "NIE" << endl;
}
else
{
cout << tot[i] << endl;
}
}
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...