QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#67426 | #5098. 第一代图灵机 | hjl666 | Compile Error | / | / | C++14 | 4.1kb | 2022-12-10 14:33:54 | 2022-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
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [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]}; | ^