QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#572549#8951. 澡堂Kevin5307#0 4ms53184kbC++235.4kb2024-09-18 15:14:512024-09-18 15:14:52

Judging History

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

  • [2024-09-18 15:14:52]
  • 评测
  • 测评结果:0
  • 用时:4ms
  • 内存:53184kb
  • [2024-09-18 15:14:51]
  • 提交

answer

//Author: Kevin
#include<bits/stdc++.h>
//#pragma GCC optimize("O2")
using namespace std;
#define ll long long
#define ull unsigned ll
#define pb emplace_back
#define mp make_pair
#define ALL(x) (x).begin(),(x).end()
#define rALL(x) (x).rbegin(),(x).rend()
#define srt(x) sort(ALL(x))
#define rev(x) reverse(ALL(x))
#define rsrt(x) sort(rALL(x))
#define sz(x) (int)(x.size())
#define inf 0x3f3f3f3f
#define pii pair<int,int>
#define lb(v,x) (int)(lower_bound(ALL(v),x)-v.begin())
#define ub(v,x) (int)(upper_bound(ALL(v),x)-v.begin())
#define uni(v) v.resize(unique(ALL(v))-v.begin())
#define longer __int128_t
void die(string S){puts(S.c_str());exit(0);}
int n,m,q;
ll T;
ll a[1001000];
ll psum[1001000][5];
ll b[1001000];
ll sum[5];
ll rsum[1001000][5];
ll psum1[1001000][5];
ll pmx[1001000][5];
ll nxt[20][1001000][5];
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>q>>T;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		b[i]=a[i]+T*n-T*(i/m);
	}
	for(int i=1;i<=n+666;i++)
		for(int j=0;j<m;j++)
			psum[i][j]=psum[i-1][j]+(i%m==j?b[i]:0);
	vector<pair<ll,int>> vec[5];
	for(int i=n;i>=1;i--)
	{
		ll val=b[i];
		int p=i%m;
		int tot=1;
		while(sz(vec[p])&&vec[p].back().first<=val)
		{
			sum[p]-=vec[p].back().first*vec[p].back().second;
			tot+=vec[p].back().second;
			vec[p].pop_back();
		}
		vec[p].pb(val,tot);
		sum[p]+=val*tot;
		for(int j=0;j<m;j++)
			rsum[i][j]=sum[j];
	}
	ll mx[5];
	memset(mx,0,sizeof(mx));
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<5;j++)
			psum1[i][j]=psum1[i-1][j]+(i%m==j?max(0ll,mx[j]-b[i]):0);
		mx[i%m]=max(mx[i%m],b[i]);
		for(int j=0;j<5;j++)
			pmx[i][j]=mx[j];
	}
	for(int i=1;i<=n;i++)
		for(int j=0;j<m;j++)
			nxt[0][i][j]=(i%m==j?b[i]:0);
	for(int j=0;j<m;j++)
		for(int x=1;x<20;x++)
			for(int i=1;i<=n;i++)
				if(i+(1<<(x-1))>n)
					nxt[x][i][j]=nxt[x-1][i][j];
				else
					nxt[x][i][j]=max(nxt[x-1][i][j],nxt[x-1][i+(1<<x-1)][j]);
	while(q--)
	{
		int p;
		ll v;
		cin>>p>>v;
		int p2=lower_bound(a+1,a+n+1,v)-a;
		if(p==p2||p+1==p2)
		{
			p2--;
			ll ans=0;
			for(int i=0;i<m;i++)
				if(i!=p%m)
					ans+=psum1[n][i];
				else
				{
					ans+=psum1[p-1][i];
					ll v2=v+T*n-T*(p/m);
					ans+=max(0ll,pmx[p-1][i]-v2);
					ll cmx=max(pmx[p-1][i],v2);
					int cur=p+1;
					for(int j=19;j>=0&&cur<=n;j--)
						if(nxt[j][cur][i]<=cmx)
							cur+=(1<<j);
					cur--;
					cur=min(cur,n);
					while(cur%m!=i&&cur>=0) cur--;
					if(cur>p)
						ans+=cmx*(cur-p)/m+rsum[cur+1][i];
					else
						ans+=rsum[p+1][i];
					ans-=psum[n][i]-psum[p][i];
				}
			cout<<ans<<'\n';
		}
		else if(p<p2)
		{
			p2--;
			ll ans=0;
			ll nb=v+T*n-T*(p2/m);
			for(int i=0;i<m;i++)
			{
				ans+=psum1[p-1][i];
				int i2=(i+1)%m;
				ll cmx=pmx[p-1][i];
				int cur=p+1;
				for(int j=19;j>=0&&cur<=p2;j--)
					if(nxt[j][cur][i2]<=cmx)
						cur+=(1<<j);
				cur--;
				cur=min(cur,p2);
				while(cur%m!=i2&&cur>=0) cur--;
				int nxt=p+1;
				while(nxt%m!=i2) nxt++;
				if(!i2) cmx-=T;
				if(cur>=nxt)
				{
					ans+=cmx*(cur-nxt+m)/m;
					int cc=cur+m;
					ll Mx=0;
					while(cc<=p2)
					{
						Mx=max(Mx,b[cc]);
						ans+=Mx;
						cc+=m;
					}
				}
				else
				{
					int cc=nxt;
					ll Mx=0;
					while(cc<=p2)
					{
						Mx=max(Mx,b[cc]);
						ans+=Mx;
						cc+=m;
					}
				}
				ans-=psum[p2][i2]-psum[p][i2];
				int x=p+1,len=p2-p;
				for(int j=0;j<20;j++) if(len>>j&1)
				{
					cmx=max(cmx,::nxt[j][x][i2]);
					x+=(1<<j);
				}
				if(!i2) cmx+=T;
				if(p2%m==i)
				{
					ans+=max(0ll,cmx-nb);
					cmx=max(cmx,nb);
				}
				cur=p2+1;
				for(int j=19;j>=0&&cur<=n;j--)
					if(::nxt[j][cur][i]<=cmx)
						cur+=(1<<j);
				cur--;
				cur=min(cur,n);
				nxt=p2+1;
				while(nxt%m!=i) nxt++;
				while(cur%m!=i&&cur>=0) cur--;
				if(cur>=nxt)
					ans+=cmx*(cur-nxt+m)/m+rsum[cur+1][i];
				else
					ans+=rsum[nxt][i];
				ans-=psum[n][i]-psum[nxt-1][i];
			}
			cout<<ans<<'\n';
		}
		else
		{
			ll ans=0;
			ll nb=v+T*n-T*(p2/m);
			for(int i=0;i<m;i++)
			{
				ans+=psum1[p2-1][i];
				int i2=(i+m-1)%m;
				ll cmx=pmx[p2-1][i];
				int cur=p2;
				if(p2%m==i)
				{
					ans+=max(0ll,cmx-nb);
					cmx=max(cmx,nb);
				}
				if(!i) cmx+=T;
				for(int j=19;j>=0&&cur<p;j--)
					if(nxt[j][cur][i2]<=cmx)
						cur+=(1<<j);
				cur--;
				cur=min(cur,p-1);
				while(cur%m!=i2&&cur>=0) cur--;
				int nxt=p2;
				while(nxt%m!=i2) nxt++;
				if(cur>=nxt)
				{
					ans+=cmx*(cur-nxt+m)/m;
					int cc=cur+m;
					ll Mx=0;
					while(cc<p)
					{
						Mx=max(Mx,b[cc]);
						ans+=Mx;
						cc+=m;
					}
				}
				else
				{
					int cc=nxt;
					ll Mx=0;
					while(cc<p)
					{
						Mx=max(Mx,b[cc]);
						ans+=Mx;
						cc+=m;
					}
				}
				ans-=psum[p-1][i2]-psum[p2-1][i2];
				int x=p2,len=p-p2;
				for(int j=0;j<20;j++) if(len>>j&1)
				{
					cmx=max(cmx,::nxt[j][x][i2]);
					x+=(1<<j);
				}
				if(!i) cmx-=T;
				cur=p+1;
				for(int j=19;j>=0&&cur<=n;j--)
					if(::nxt[j][cur][i]<=cmx)
						cur+=(1<<j);
				cur--;
				cur=min(cur,n);
				nxt=p+1;
				while(nxt%m!=i) nxt++;
				while(cur%m!=i) cur--;
				if(cur>=nxt)
					ans+=cmx*(cur-nxt+m)/m+rsum[cur+1][i];
				else
					ans+=rsum[nxt][i];
				ans-=psum[n][i]-psum[nxt-1][i];
			}
			cout<<ans<<'\n';
		}
	}
	return 0;
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 10
Accepted
time: 0ms
memory: 52892kb

input:

1000 5 1000 1969617
59993 133807 154199 240894 438118 483699 540258 892751 922552 1049554 1092961 1153394 1287745 1315664 1372758 1550447 1634967 1817853 1825455 2023239 2064188 2117896 2250036 2453036 2492474 2794776 2917935 3047993 3153958 3163156 3237767 3443614 3664074 3716235 3801008 3822067 40...

output:

145473107761
145400375427
145403718605
145444938654
145438908460
145436948885
145405212826
145454120934
145460664260
145458475414
145433391640
145459823384
145401672860
145361079139
145486629489
145451768180
145426177956
145368877047
145384484360
145392373415
145514759762
145437334277
145471143810
1...

result:

ok 1000 lines

Test #2:

score: 0
Wrong Answer
time: 4ms
memory: 53184kb

input:

1000 5 1000 36167
8215 12748 13176 18886 28740 44382 48915 49343 55053 64907 80549 85082 85510 91220 101074 116716 121249 121677 127387 137241 152883 157416 157844 163554 173408 189050 193583 194011 199721 209575 225217 229750 230178 235888 245742 261384 265917 266345 272055 281909 297551 302084 302...

output:

5268006
4273384
5481998
4487507
3929830
5739420
4991040
4831250
7231365
4747488
4297386
5802404
4985536
6679984
4450596
5501097
1350307
5511682
3977461
4039862
4570217
2278442
6060994
4619639
6617992
5548191
3845577
935828
5496672
4915001
4504784
3840511
3095764
5159446
3355278
3706633
4592285
46869...

result:

wrong answer 1st lines differ - expected: '5383542', found: '5268006'

Subtask #2:

score: 0
Memory Limit Exceeded

Test #6:

score: 0
Memory Limit Exceeded

input:

1000000 1 100000 1165
83 197 266 277 299 529 538 601 629 760 792 1081 1208 1211 1387 1726 1873 1932 2198 2437 2448 2584 2715 2813 3113 3169 3207 3386 3934 4013 4032 4057 4137 4213 4396 4666 4754 4786 4856 4917 4966 5054 5124 5151 5196 5505 5548 5583 5730 5763 6031 6161 6169 6372 6446 6517 6712 6744 ...

output:

532526465394304
532526382684731
532526432382169
532526335149396
532526336776485
532526441654485
532526419072018
532526448365904
532526461590885
532526446716107
532526451559614
532526448428416
532526467783803
532526436578785
532526455446447
532526418608776
532526437618228
532526421765463
532526361938...

result:


Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Skipped

Dependency #1:

0%

Subtask #5:

score: 0
Memory Limit Exceeded

Test #36:

score: 0
Memory Limit Exceeded

input:

1000000 5 100000 1887
112 168 223 393 535 558 577 631 631 678 682 1043 1099 1268 1337 1396 1437 1472 1510 1587 1804 1984 2013 2290 2294 2392 2474 2547 2694 2717 2742 2841 2880 2906 2985 3030 3047 3064 3108 3275 3375 3440 3451 3488 3950 3957 3963 4047 4086 4335 4378 4448 4490 4544 4622 4864 4875 4897...

output:

138785143191754
138785158412509
138785225283652
138785104800924
138785118976960
138785112934741
138785059838322
138785084952748
138785129256978
138785072292366
138785090484906
138785174307446
138785204546881
138785189045551
138785131284055
138785130779155
138785104455009
138785163776264
138785127154...

result:


Subtask #6:

score: 0
Skipped

Dependency #3:

0%