QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#205944#7565. Harumachi Kazeucup-team052#RE 3ms112592kbC++233.5kb2023-10-07 17:54:342023-10-07 17:56:40

Judging History

你现在查看的是最新测评结果

  • [2023-10-07 17:56:40]
  • 评测
  • 测评结果:RE
  • 用时:3ms
  • 内存:112592kb
  • [2023-10-07 17:54:34]
  • 提交

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=400;
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;
}



詳細信息

Test #1:

score: 100
Accepted
time: 3ms
memory: 112384kb

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: 3ms
memory: 112592kb

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
Runtime Error

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...

result: