제출 #1245071

#제출 시각아이디문제언어결과실행 시간메모리
1245071caacrugon말 (IOI15_horses)C++20
100 / 100
236 ms91440 KiB
#include <bits/stdc++.h> #include "horses.h" using namespace std; #define ll long long #define mkp make_pair #define pb push_back #define f first #define s second ll mod=1e9+7; struct info{ ll gan,val,po; double lgan,lval; }; ll n; vector<pair<ll,ll>> ln; vector<info> segtree; info merge(info left, info rigth){ info ans; ans.gan=(left.gan*rigth.gan)%mod; ans.lgan=left.lgan+rigth.lgan; double nlogc=left.lgan+rigth.lval; ll ngamc=(left.gan*rigth.val)%mod; if(left.lval>=nlogc){ ans.val=left.val; ans.lval=left.lval; ans.po=left.po; }else{ ans.val=ngamc; ans.lval=nlogc; ans.po=rigth.po; } return ans; } void uptade(ll no, ll l, ll r, ll x, ll v, ll in){ if(l==r){ segtree[no].val=(v*in)%mod; segtree[no].lval=log((double)in*(double)v); segtree[no].po=x; segtree[no].gan=in; segtree[no].lgan=log((double)in); return; } ll m=l+((r-l)/2); if(x<=m) uptade(no*2, l, m, x, v, in); else uptade(no*2+1, m+1, r, x, v, in); segtree[no]=merge(segtree[no*2],segtree[no*2+1]); return; } int init(int N, int X[], int Y[]) { n=N; ln.reserve(N+1); segtree.resize(N*4+10); for(int i=0;i<n;i++){ ln.pb(mkp(X[i],Y[i])); uptade(1,0,N-1,i,Y[i],X[i]); } return segtree[1].val; } int updateX(int pos, int val) { ln[pos].f=val; uptade(1,0,n-1,pos,ln[pos].s,val); return segtree[1].val; } int updateY(int pos, int val) { ln[pos].s=val; uptade(1,0,n-1,pos,val,ln[pos].f); return segtree[1].val; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...