QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#67426#5098. 第一代图灵机hjl666Compile Error//C++144.1kb2022-12-10 14:33:542022-12-10 14:33:57

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 14:33:57]
  • Judged
  • [2022-12-10 14:33:54]
  • Submitted

answer

#include<bits/stdc++.h>
#define db double
#define int ll
#define ll long long
#define ull unsigned long long
#define pb emplace_back
#define MP make_pair
#define pii pair<int, int>
#define fi first
#define se second
#define ls k<<1
#define rs k<<1|1
#define CLK (double)clock()/(double)CLOCKS_PER_SEC
using namespace std;
mt19937 rnd(time(0));
inline int read(){
	register int x=0,f=1;
	register char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
inline void write(register int x){
	if(x<0){putchar('-');x=-x;}
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
const int N=2e5+5;
int n,m,q,pre[N],sum[N],a[N],c[N];
set<int>st[N];
#define ans(k) t[k].ans
#define S(k) t[k].S
#define mxpre(k) t[k].mxpre
#define mxsum(k) t[k].mxsum
#define nxt(k) t[k].nxt
struct Data{
	int id,l,r,nxt,ans,S,mxpre,mxsum;
}t[N<<2];
int qry(int k,int lt,int rt,int x){
	//cout<<lt<<' '<<rt<<' '<<x<<"\n";
	if(lt==rt)return sum[lt]-sum[max(x,pre[lt])];
	if(mxpre(k)<x)return 0;
	int mid=lt+rt>>1;
	if(mxpre(ls)<x)return max(mxsum(ls)-sum[x-1],qry(rs,mid+1,rt,x));
	else return max(S(k),qry(ls,lt,mid,x));
}
int query(int k,int lt,int rt,int x){
	//cout<<lt<<' '<<rt<<' '<<x<<"\n";
	if(lt==rt)return sum[lt]-sum[max(pre[lt],x-1)];
	int mid=lt+rt>>1,res=0;
	if(mxpre(ls)<x){
		res=max(res,mxsum(ls)-sum[x-1]);
		res=max(res,query(rs,mid+1,rt,x));
		return res;
	}
	else {
		res=max(res,S(k));
		res=max(res,query(ls,lt,mid,x));
		return res;
	}
}
Data operator +(Data a,Data b)
{
	Data c;
//	cout<<a.id<<' '<<a.l<<' '<<a.r<<' '<<a.mxpre<<' '<<a.nxt<<' '<<a.S<<' '<<a.ans<<"\n";
//	cout<<b.id<<' '<<b.l<<' '<<b.r<<' '<<b.mxpre<<' '<<b.nxt<<' '<<b.S<<' '<<b.ans<<"\n";
	c.mxpre=max(a.mxpre,b.mxpre);
	c.mxsum=max(a.mxsum,b.mxsum);
	c.l=a.l,c.r=b.r;c.id=a.id;
	c.S=max(a.S,qry(b.id,b.l,b.r,a.mxpre));
	c.ans=max(a.ans,b.ans);
	c.ans=max(c.ans,query(b.id,b.l,b.r,a.nxt));
	c.nxt=b.nxt;
    if(b.nxt==b.l)c.nxt=max(a.nxt,b.mxpre+1);
//	cout<<c.id<<' '<<c.l<<' '<<c.r<<' '<<c.S<<' '<<c.ans<<"\n";
	return c;
}
void pushup(int k,int lt,int rt){
//	cout<<k<<' '<<lt<<' '<<rt<<"\n";
	t[k]=t[ls]+t[rs];
	t[k].id=k;
}
void build(int k,int lt,int rt){
	if(lt==rt){
//		cout<<k<<' '<<lt<<' '<<rt<<"\n";
		t[k]={k,lt,lt,lt,a[lt],-1e9,pre[lt],sum[lt]};
		return ;
	}
	int mid=lt+rt>>1;
	build(ls,lt,mid);build(rs,mid+1,rt);
	pushup(k,lt,rt);
}
void modify(int k,int lt,int rt,int pos,int p){
	if(lt==rt){
		mxpre(k)=p;S(k)=sum[lt]-sum[p];
		return ;
	}
	int mid=lt+rt>>1;
	if(pos<=mid)modify(ls,lt,mid,pos,p);
	else modify(rs,mid+1,rt,pos,p);
	pushup(k,lt,rt);
}
int top;
Data stk[N];
void ask(int k,int lt,int rt,int qx,int qy){
//	cout<<lt<<' '<<rt<<' '<<qx<<' '<<qy<<"\n";
	if(qx<=lt&&rt<=qy)return stk[++top]=t[k],void();
	int mid=lt+rt>>1;
	if(qx<=mid)ask(ls,lt,mid,qx,qy);
	if(qy>mid)ask(rs,mid+1,rt,qx,qy);
}
void 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<=m;i++)st[i].insert(0),st[i].insert(n+1);
	for(int i=1;i<=n;i++){
		c[i]=read();st[c[i]].insert(i);
		pre[i]=*--st[c[i]].lower_bound(i);
//		cout<<pre[i]<<' ';
	}
	build(1,1,n);
//	cout<<"Work\n";
	for(int i=1;i<=q;i++){
		int opt=read(),x=read(),y=read();
		if(opt==1){
			top=0;ask(1,1,n,x,y);
			for(int i=1;i<=top;i++){
//				cout<<stk[i].l<<' '<<stk[i].r<<' '<<stk[i].ans<<"\n";
			}
			for(int i=2;i<=top;i++)stk[1]=stk[1]+stk[i];
			cout<<stk[1].ans<<"\n";
		}
		else {
			int p=*st[c[x]].upper_bound(x);
			int q=*st[y].upper_bound(x);
			st[c[x]].erase(x);c[x]=y;st[c[x]].insert(x);
			pre[x]=*--st[c[x]].lower_bound(x);
			modify(1,1,n,x,pre[x]);
			if(p<=n){
				pre[p]=*--st[c[p]].lower_bound(p);
				modify(1,1,n,p,pre[p]);
			}
			if(q<=n){
				pre[q]=*--st[c[q]].lower_bound(q);
				modify(1,1,n,q,pre[q]);
			}
		}
	}
}
signed main(){
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
    int T=1;while(T--)MAIN();
//  printf("\nTIME:%lf\n",(double)clock()/CLOCKS_PER_SEC);
	return 0;
}




詳細信息

answer.code: In function ‘void build(long long int, long long int, long long int)’:
answer.code:86:60: error: narrowing conversion of ‘-1.0e+9’ from ‘double’ to ‘long long int’ [-Wnarrowing]
   86 |                 t[k]={k,lt,lt,lt,a[lt],-1e9,pre[lt],sum[lt]};
      |                                                            ^