제출 #1191004

#제출 시각아이디문제언어결과실행 시간메모리
1191004simona1230말 (IOI15_horses)C++20
컴파일 에러
0 ms0 KiB
#include "horses.h" #include<bits/stdc++.h> using namespace std; //static FILE *_inputFile, *_outputFile; const int mod=1e9+7; const int maxn=5*1e5+5; long long n,x[maxn],y[maxn]; long long maxx[4*maxn],prod[4*maxn]; int qmax(int i,int l,int r,int ql,int qr) { if(ql>qr)return 0; if(ql<=l&&r<=qr)return maxx[i]; int m=(l+r)/2; return max(qmax(i*2,l,m,ql,min(qr,m)),qmax(i*2+1,m+1,r,max(m+1,ql),qr)); } long long qprod(int i,int l,int r,int ql,int qr) { if(ql>qr)return 1; if(ql<=l&&r<=qr)return prod[i]; int m=(l+r)/2; return (qprod(i*2,l,m,ql,min(qr,m))*qprod(i*2+1,m+1,r,max(m+1,ql),qr))%mod; } set<int> s; long long answer() { if(n==1)return (x[0]*y[0])%mod; if(s.size()==0)return maxx[1]; //for(auto it=s.begin();it!=s.end();it++) // cout<<*it<<endl; auto it=s.end(); long long curr=0,id=0,hh=0; while(it!=s.begin()) { int nxt=n-1; if(it!=s.end())nxt=*it-1; it--; int i=*it; int h=qmax(1,0,n-1,i,nxt); //fprintf(_outputFile,"%d ",nxt); //cout<<"+ "<<h<<endl; if(curr<h)curr=h,id=i,hh=h; curr*=x[i]; if(curr>1e9)break; } //cout<<id<<endl; return (qprod(1,0,n-1,0,id)*hh)%mod; } void umaxx(int i,int l,int r,int id,int vl) { if(l==r) { maxx[i]=vl; return; } int m=(l+r)/2; if(id<=m)umaxx(i*2,l,m,id,vl); else umaxx(i*2+1,m+1,r,id,vl); maxx[i]=max(maxx[i*2],maxx[i*2+1]); } void uprod(int i,int l,int r,int id,int vl) { if(l==r) { prod[i]=vl; return; } int m=(l+r)/2; if(id<=m)uprod(i*2,l,m,id,vl); else uprod(i*2+1,m+1,r,id,vl); prod[i]=(prod[i*2]*prod[i*2+1])%mod; } void build(int i,int l,int r) { if(l==r) { maxx[i]=y[l]; prod[i]=x[l]; return; } int m=(l+r)/2; build(i*2,l,m); build(i*2+1,m+1,r); maxx[i]=max(maxx[i*2],maxx[i*2+1]); prod[i]=(prod[i*2]*prod[i*2+1])%mod; } int init(int N, int X[], int Y[]) { n=N; for(int i=0;i<N;i++) x[i]=X[i],y[i]=Y[i]; build(1,0,n-1); for(int i=0;i<N;i++) if(x[i]!=1)s.insert(i); s.insert(0); return answer(); } int updateX(int pos, int val) { x[pos]=val; if(val==1&&pos)s.erase(pos); else s.insert(pos); uprod(1,0,n-1,pos,val); return answer(); } int updateY(int pos, int val) { y[pos]=val; umaxx(1,0,n-1,pos,val); return answer(); } long long answer1() { if(n==1)return x[0]*y[0]%mod; long long curr=0,id=0; for(int i=n-1;i>=0;i--) { if(curr<y[i]) id=i,curr=x[i]*y[i]; else curr*=x[i]; if(curr>1e9)break; ///fprintf(_outputFile,"%d ",curr); } long long ans=1; for(int i=0;i<=id;i++) { ans*=x[i]; ans%=mod; } return ans*y[id]%mod; } int init1(int N, int X[], int Y[]) { n=N; for(int i=0;i<N;i++) x[i]=X[i],y[i]=Y[i]; return answer(); } int updateX1(int pos, int val) { x[pos]=val; return answer(); } int updateY1(int pos, int val) { y[pos]=val; return answer(); } int nn,xx[maxn],yy[maxn],qq; int main() { cin>>nn; for(int i=0;i<nn;i++) cin>>xx[i]; for(int i=0;i<nn;i++) cin>>yy[i]; cout<<init(nn,xx,yy)<<endl; cin>>qq; for(int i=0;i<qq;i++) { int t,id,vl; cin>>t>>id>>vl; if(t==1)cout<<updateX(id,vl)<<endl; else cout<<updateY(id,vl)<<endl; } return 0; } /* 3 2 1 3 3 4 1 1 2 1 2 */

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccYpFBFD.o: in function `main':
grader.c:(.text.startup+0x0): multiple definition of `main'; /tmp/ccUwR3xz.o:horses.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status