QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#566857#9313. Make Maxmardog666WA 29ms5140kbC++172.0kb2024-09-16 02:30:162024-09-16 02:30:17

Judging History

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

  • [2024-09-18 15:56:24]
  • hack成功,自动添加数据
  • (/hack/836)
  • [2024-09-16 02:30:17]
  • 评测
  • 测评结果:WA
  • 用时:29ms
  • 内存:5140kb
  • [2024-09-16 02:30:16]
  • 提交

answer

#include<bits/stdc++.h> 
#define int long long 
using namespace std;   
const int N=2e5+10;
typedef pair<int,int> PII;
signed main() 
{  
    ios::sync_with_stdio(0);  
    cin.tie(0);  
    cout.tie(0);  
    int _=1;  
    cin>>_;  
    while(_--) 
	{  
		int n;
		cin>>n;
		int a[N];
		for(int i=0;i<n;i++) cin>>a[i];
		stack<PII> st;//单调栈找到最大操作数 
		st.push({a[0],0});//第一个先入栈 
		int ans=0;//存储答案 
		for(int i=1;i<n;i++)
		{
			if(st.top().first>a[i])//如果下一个比前一个要小,则入栈,因为不需要改变。例如第一个数为3 第二个数为1,第一个数不会随着第二个数改变 
			{
				PII t;
				t.first=a[i];
				t.second=i;
				st.push(t);//入栈 
			}
			else if(st.top().first<a[i])//如果下一个比前一个要大,则要开始判断 
			{
				PII t;
				bool f=1;//判断到什么时候截止,例如 4 3 5,前面两个最终都会变成5,不会只有第二个数在变 
				while(!st.empty()&&f)//循环更新 
				{
					f=0;
					if(st.top().first<a[i])//看看是否还需要继续更新 
					{
						f=1;//进来了说明还会继续更新,所以f变为1 
						t=st.top();
						st.pop();
						ans+=i-t.second;//直接用下标相减,因为会隔开。例如4 3 5.下标为0 1 2 则会有2次改变全变成5 
					}
				}
				if(st.size())
				{
					if(st.top().first==a[i])continue;//如果处理到不能再处理时最后一个数恰好为a[i],则继续循环 
				}
				st.push({a[i],t.second});//如果不是,则最后一个a[i]入栈。为什么不能直接插入i而是t.second,因为如果这个a[i]不是最大的数字
				//接上,则他最后会有t.second个数需要变成下一个更大的数 
			}
		}
		while(st.size()>1)
		{
			PII t=st.top();
			st.pop();
			cout<<t.second<<endl;
			ans+=n-t.second;//因为50行已经处理过了,所以直接用n-t.second。比如9 4 3 5,5的second就是 1,4-1就是最后需要变成9的个数 
		}
		cout<<ans<<endl;
	}
    return 0;  
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5140kb

input:

4
2
1 2
2
2 2
7
1 1 1 2 2 2 2
3
1 2 3

output:

1
0
3
3

result:

ok 4 number(s): "1 0 3 3"

Test #2:

score: -100
Wrong Answer
time: 29ms
memory: 5136kb

input:

2
198018
875421126 585870339 471894633 383529988 625397685 944061047 704695631 105113224 459022561 760848605 980735314 847376362 980571959 329939331 644635272 326439858 752879510 837384394 175179068 182094523 397239381 1199016 185143405 279638454 252374970 822030887 860312140 137248166 993229443 164...

output:

198017
198016
198014
197984
194015
188522
162516
154292
84090
4084978
190745
190744
190474
189995
175173
163715
102304
37702
35767
4130372

result:

wrong answer 1st numbers differ - expected: '4084978', found: '198017'