QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#205950 | #7565. Harumachi Kaze | ucup-team052# | ML | 11ms | 235464kb | C++23 | 3.5kb | 2023-10-07 17:55:01 | 2023-10-07 17:59:33 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define eb emplace_back
//mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
#define mod 998244353
#define ll long long
#define u64 unsigned long long
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
inline u64 read()
{
char ch=getchar(); while(!isdigit(ch)) {ch=getchar();}
u64 ans=0; while(isdigit(ch)) {ans=ans*10+ch-48;ch=getchar();}
return ans;
}
void print(vector<u64> x){for(int i=0;i<(int)x.size();i++) printf("%llu%c",x[i]," \n"[i==(int)x.size()-1]);}
#define N 20005
int n,Q,B;
const int SIZ=125;
int _cnt=0;
u64 Add(u64 x,u64 y)
{
_cnt++;
assert(_cnt<=1600000);
#ifdef wasa855
return x+y;
#endif
printf("A %llu %llu\n",x,y); fflush(stdout);
return read();
}
u64 Cmp(u64 x,u64 y)
{
_cnt++;
assert(_cnt<=1600000);
#ifdef wasa855
return x<y?x:y;
#endif
printf("C %llu %llu\n",x,y); fflush(stdout);
return read();
}
const int S=900;
struct Arr
{
u64 a[N];
u64 bs[N],sum[N],pre[N],pop[N];
int cnt;
map<int,u64> tb;
int l[N],r[N],bel[N];
ll f[16005][S+5],fr[16005][S+5];
void init()
{
memset(f,0x3f,sizeof(f));
f[n][0]=0;
for(int i=n;i>=0;i--)
{
for(int j=0;j<=S;j++)
{
ll tw=f[i][j];
for(int k=i-1;k>=max(0,i-S);k--)
{
tw+=(i-k)*pop[k];
tw+=j*pop[k];
if(tw<f[k][j+1]) f[k][j+1]=f[i][j],fr[k][j+1]=i;
}
}
}
int mni=0;
for(int i=1;i<=S;i++) if(f[0][i]<f[0][mni]) mni=i;
for(int tl=0,tr;tl<n;tl=tr+1)
{
tr=fr[tl][mni]; mni--;
l[++cnt]=tl,r[cnt]=tr;
for(int i=tl;i<=tr;i++) bel[i]=cnt;
}
for(int i=1;i<=cnt;i++)
{
int L=l[i],R=r[i];
pre[L]=a[L];
for(int j=L+1;j<=R;j++) pre[j]=Add(pre[j-1],a[j]);
sum[i]=pre[R];
}
for(int i=2;i<=cnt;i++) bs[i]=Add(bs[i-1],sum[i-1]);
}
u64 qry(int i)
{
if(tb.find(i)!=tb.end()) return tb[i];
if(i==n) assert(0);
return tb[i]=Add(bs[bel[i]],pre[i]);
}
void upd(int i,u64 v)
{
tb.clear();
a[i]=v;
int bid=bel[i],L=l[bid],R=r[bid];
pre[L]=a[L];
for(int j=max(i,L+1);j<=R;j++) pre[j]=Add(pre[j-1],a[j]);
sum[bid]=pre[R];
for(int i=max(2,bid+1);i<=cnt;i++) bs[i]=Add(bs[i-1],sum[i-1]);
}
}a,b;
int op[N],t[N],pos[N];
u64 x[N];
signed main()
{
// cout<<sizeof(a)/1024.0/1024<<endl;
cin>>n>>Q>>B;
for(int i=0;i<n;i++) a.a[i]=read();
for(int i=0;i<n;i++) b.a[i]=read();
for(int i=1;i<=Q;i++)
{
op[i]=read();
if(op[i]==1)
{
t[i]=read(),pos[i]=read()-1,x[i]=read();
if(t[i]==1) a.pop[pos[i]]++;
else b.pop[pos[i]]++;
}
else t[i]=read();
}
a.init(),b.init();
vector<u64> ANS;
for(int i=1;i<=Q;i++)
{
if(op[i]==1)
{
if(t[i]==1) a.upd(pos[i],x[i]);
else b.upd(pos[i],x[i]);
}
else
{
if(t[i]==2*n)
{
u64 A=a.qry(n-1),B=b.qry(n-1);
if(Cmp(A,B)==A) ANS.pb(B);
else ANS.pb(A);
continue;
}
int L=min(n-1,t[i]-2);
int l=0,r=min(n-1,t[i]-2),ans=L+1;
while(l<=r)
{
int mid=(l+r)/2;
if(t[i]-mid-2>=n)
{
l=mid+1;
continue;
}
u64 A=a.qry(mid),B=b.qry(t[i]-mid-2);
if(Cmp(A,B)==B) ans=mid,r=mid-1;
else l=mid+1;
}
if(ans==n) ANS.pb(b.qry(t[i]-n-1));
else
{
u64 A=a.qry(ans),B=b.qry(t[i]-ans-1);
// printf("%d %d - %d %d\n",ans,t[i]-ans-1,A,B);
ANS.pb(Cmp(A,B));
}
}
// for(int i=0;i<n;i++) printf("%d%c",b.qry(i)," \n"[i==n-1]);
}
printf("! %d\n",(int)ANS.size());
print(ANS);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 11ms
memory: 233232kb
input:
2 3 2 288230376151711744 864691128455135232 1441151880758558720 2017612633061982208 2 3 1 2 2 2594073385365405696 2 3 1152921504606846976 1152921504606846976 3458764513820540928 3458764513820540928 288230376151711744 3458764513820540928 288230376151711744 1152921504606846976 1441151880758558720 1152...
output:
A 288230376151711744 864691128455135232 A 1152921504606846976 0 A 1441151880758558720 2017612633061982208 A 3458764513820540928 0 A 0 288230376151711744 A 0 3458764513820540928 C 288230376151711744 3458764513820540928 A 0 1152921504606846976 A 0 1441151880758558720 C 1152921504606846976 144115188075...
result:
ok 2 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 235464kb
input:
3 5 3 2017612633061982208 864691128455135232 2305843009213693952 1441151880758558720 2017612633061982208 288230376151711744 2 5 2 2 1 1 3 1729382256910270464 1 2 1 2017612633061982208 2 5 2882303761517117440 5188146770730811392 5188146770730811392 3458764513820540928 3746994889972252672 374699488997...
output:
A 2017612633061982208 864691128455135232 A 2882303761517117440 2305843009213693952 A 5188146770730811392 0 A 1441151880758558720 2017612633061982208 A 3458764513820540928 288230376151711744 A 3746994889972252672 0 A 0 2882303761517117440 A 0 3746994889972252672 C 2882303761517117440 3746994889972252...
result:
ok 2 lines
Test #3:
score: -100
Memory Limit Exceeded
input:
16000 20000 14 12381691541923575949 2314459967875656919 15240288079556723088 320873566057825844 1013209648229540810 17538037439317817183 11476444495745028170 14967174865083701448 17232652930598276562 7175999203534983334 4597650078600036201 13978217693115848142 17682091621678261784 488328147143975490...
output:
A 12381691541923575949 2314459967875656919 A 14696151509799232868 15240288079556723088 A 12486187300948059893 320873566057825844 A 12807060867005885737 1013209648229540810 A 13820270515235426547 17538037439317817183 A 13908055666145347667 11476444495745028170 A 7934247873482479774 149671748650837014...