QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#67203 | #5098. 第一代图灵机 | _ZMF_ | Compile Error | / | / | C++11 | 3.2kb | 2022-12-10 10:39:10 | 2022-12-10 10:39:18 |
Judging History
This is the latest submission verdict.
- [2023-08-10 23:21:45]
- System Update: QOJ starts to keep a history of the judgings of all the submissions.
- [2022-12-10 10:39:18]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2022-12-10 10:39:10]
- Submitted
answer
/*
60 + 0 + 100 + 64 = 224.
*/
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read()
{
int sum = 0, nega = 1;
char ch = getchar();
while (ch > '9'||ch < '0')
{
if (ch == '-') nega = -1;
ch = getchar();
}
while (ch <= '9' && ch >= '0') sum = sum * 10 + ch - '0', ch = getchar();
return sum * nega;
}
// 真不会写线段树维护单调栈/ng
const int N = 2e5 + 9;
int n, m, q, a[N], c[N], nxt[N], sum[N], Lim;
set<int> s[N];
int mn[N << 2], tr[N << 2];
inline int lc(int p) {return p << 1;}
inline int rc(int p) {return p << 1 | 1;}
inline int query(int l, int r, int p, int v)
{
if(mn[p] > v) return 0;
if(l == r) return sum[v - 1] - sum[l];
int mid = (l + r) >> 1;
if(mn[rc(p)] >= v) return query(l, mid, lc(p), v);
else return max(tr[p], query(mid + 1, r, rc(p), v));
}
inline void push_up(int l, int r, int p)
{
mn[p] = min(mn[lc(p)], mn[rc(p)]);
int mid = (l + r) >> 1;
tr[p] = query(l, mid, lc(p), mn[rc(p)]);
return ;
}
inline void build(int l, int r, int p)
{
if(l == r) {mn[p] = nxt[l]; tr[p] = 0; return ;}
int mid = (l + r) >> 1;
build(l, mid, lc(p)); build(mid + 1, r, rc(p));
push_up(l, r, p); return ;
}
inline void update(int l, int r, int p, int pos)
{
if(pos == 0) return ;
if(l == r) {mn[p] = nxt[l]; tr[p] = 0; return ;}
int mid = (l + r) >> 1;
if(mid >= pos) update(l, mid, lc(p), pos);
else update(mid + 1, r, rc(p), pos);
push_up(l, r, p); return ;
}
inline int get(int l, int r, int p, int L, int R)
{
if(l == r) return mn[p];
int mid = (l + r) >> 1;
int res = 1e9;
if(mid >= L) res = min(res, get(l, mid, lc(p), L, R));
if(mid < R) res = min(res, get(mid + 1, r, rc(p), L, R));
return res;
}
inline int Query(int l, int r, int p, int L, int R)
{
int res = 0;
if(L <= l && r <= R)
{
res = query(l, r, p, Lim); Lim = min(Lim, mn[p]);
return res;
}
int mid = (l + r) >> 1;
if(mid < R) res = min(res, Query(mid + 1, r, rc(p), L, R));
if(mid >= L) res = min(res, Query(l, mid, lc(p), L, R));
return res;
}
signed main()
{
n = read(), m = read(), q = read();
for (int i = 1; i <= n; i++) a[i] = read(), sum[i] = sum[i - 1] + a[i];
for (int i = 1; i <= n; i++) s[i].insert(n + 1), s[i].insert(0);
for (int i = 1; i <= n; i++) c[i] = read(), s[c[i]].insert(i);
for (int i = 1; i <= n; i++) nxt[i] = *s[c[i]].upper_bound(i);
build(1, n, 1);
for (int i = 1; i <= q; i++)
{
int opt = read();
if(opt == 1)
{
int l = read(), r = read(); Lim = r + 1;
int ans = Query(1, n, 1, l, r);
// int now = min(r + 1, get(1, n, 1, l, r));
now = r + 1;
ans = max(ans, sum[now - 1] - sum[l - 1]);
printf("%lld\n", ans);
}
else
{
int pos = read(), col = read();
if(c[pos] == col) continue;
int pre1 = *(--s[c[pos]].lower_bound(pos));
int pre2 = *(--s[col].lower_bound(pos));
s[c[pos]].erase(pos);
s[col].insert(pos);
nxt[pre1] = *s[c[pos]].upper_bound(pre1);
nxt[pos] = *s[col].upper_bound(pos);
nxt[pre2] = *s[col].upper_bound(pre2);
c[pos] = col;
update(1, n, 1, pre1); update(1, n, 1, pre2); update(1, n, 1, pos);
}
}
return 0;
}
詳細信息
answer.code: In function ‘int main()’: answer.code:97:25: error: ‘now’ was not declared in this scope; did you mean ‘pow’? 97 | now = r + 1; | ^~~ | pow