QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#67203#5098. 第一代图灵机_ZMF_Compile Error//C++113.2kb2022-12-10 10:39:102022-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
  • [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;
}


Details

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