QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#67666#5098. 第一代图灵机skiceanCompile Error//C++142.5kb2022-12-11 00:10:582022-12-11 00:11:01

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-11 00:11:01]
  • Judged
  • [2022-12-11 00:10:58]
  • Submitted

answer

#include <cstdio>
#include <iostream>
#include <set>
#define macro_expand(x) #x
#define print_macro(x) printf("%s\n",macro_expand(x))
#define FOR(i,l,r) for(int i=(l),i##ADJK=(r);i<=i##ADJK;++i)
#define ROF(i,r,l) for(int i=(r),i##ADJK=(l);i>=i##ADJK;--i)
using namespace std;
typedef long long LL;
const int MN=2e5+5;
LL N,M,Q,sum[MN];
int col[MN];
set<int> pos[MN];
int get_nxt(int c,set<int>::iterator it){
	++it;
	if(pos[c].end()==it)return N+1;
	else return *it;
}
int get_pre(int c,set<int>::iterator it){
	if(it==pos[c].begin())return -1;
	else return *(--it);
}
int nxt[MN],mn[MN*4];
LL res[MN*4];
LL calc(int o,int l,int r,int z){
	if(z<mn[o])return -1;
	if(l==r)return sum[z]-sum[l];
	int mid=(l+r)>>1;
	LL tmp=calc(o<<1|1,mid+1,r,z);
	if(tmp!=-1)return max(tmp,res[o]);
	else return calc(o<<1,l,mid,z);
}
LL query(int o,int l,int r,int ql,int qr,int &z){
	if(l>qr||r<ql)return -1;
	if(z<mn[o])return -1;
	if(ql<=l&&r<=qr){
		LL ret=calc(o,l,r,z);
		z=min(z,mn[o]-1);
		return ret;
	}
	int mid=(l+r)>>1;
	LL ret=query(o<<1|1,mid+1,r,ql,qr,z);
	return max(ret,query(o<<1,l,mid,ql,qr,z));
}
void modify(int o,int l,int r,int p,int v){
	if(l==r){
		mn[o]=v;
		return;
	}
	int mid=(l+r)>>1;
	if(p<=mid)modify(o<<1,l,mid,p,v);
	else modify(o<<1|1,mid+1,r,p,v);
	res[o]=calc(o<<1,l,mid,mn[o]-1);
	mn[o]=min(mn[o<<1],mn[o<<1|1]);
}
void build(int o,int l,int r){
	if(l==r){
		mn[o]=nxt[l];
		return;
	}
	int mid=(l+r)>>1;
	build(o<<1,l,mid),build(o<<1|1,mid+1,r);
	res[o]=calc(o<<1,l,mid,mn[o<<1|1]-1);
	mn[o]=min(mn[o<<1],mn[o<<1|1]);
}
int main(){
	scanf("%lld%lld%lld",&N,&M,&Q);
	FOR(i,1,N)scanf("%lld",&sum[i]);
	FOR(i,1,N)sum[i]+=sum[i-1],scanf("%d",&col[i]);
	FOR(i,1,N)pos[col[i]].insert(i);
	FOR(i,1,N)nxt[i]=get_nxt(col[i],pos[col[i]].find(i));
	build(1,1,N);
	FOR(i,1,Q){
		int op=0,a=0,b=0;
		scanf("%d%d%d",&op,&a,&b);
		if(op==1){
			int z=b;
			LL ans=query(1,1,N);
			printf("%lld\n",max(A[z]-A[a-1],query(1,1,N,a,b,z)));
		}else{
			if(col[a]==b)continue;
			auto tmp=pos[col[a]].find(a);
			int x=get_pre(col[a],tmp),y=get_nxt(col[a],tmp);
			if(x!=-1)nxt[x]=y,modify(1,1,N,x,y);
			col[a]=b;
			pos[b].insert(a);
			tmp=pos[b].find(a);
			x=get_pre(col[a],tmp),y=get_nxt(col[a],tmp);
			if(x!=-1)nxt[x]=a,modify(1,1,N,x,a);
			nxt[a]=y,modify(1,1,N,a,y);
		}
		// cerr<<"col:";
		// FOR(j,1,N)cerr<<col[j]<<" ";
		// cerr<<endl;
		// cerr<<"nxt:";
		// FOR(j,1,N)cerr<<nxt[j]<<" ";
		// cerr<<endl<<endl;
	}
	return 0;
}

Details

answer.code: In function ‘int main()’:
answer.code:78:37: error: too few arguments to function ‘LL query(int, int, int, int, int, int&)’
   78 |                         LL ans=query(1,1,N);
      |                                ~~~~~^~~~~~~
answer.code:33:4: note: declared here
   33 | LL query(int o,int l,int r,int ql,int qr,int &z){
      |    ^~~~~
answer.code:79:45: error: ‘A’ was not declared in this scope
   79 |                         printf("%lld\n",max(A[z]-A[a-1],query(1,1,N,a,b,z)));
      |                                             ^
answer.code:67:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   67 |         scanf("%lld%lld%lld",&N,&M,&Q);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
answer.code:68:24: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   68 |         FOR(i,1,N)scanf("%lld",&sum[i]);
      |                   ~~~~~^~~~~~~~~~~~~~~~
answer.code:69:41: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   69 |         FOR(i,1,N)sum[i]+=sum[i-1],scanf("%d",&col[i]);
      |                                    ~~~~~^~~~~~~~~~~~~~
answer.code:75:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   75 |                 scanf("%d%d%d",&op,&a,&b);
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~