Hiển thị các bài đăng có nhãn stack. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn stack. Hiển thị tất cả bài đăng

Thứ Tư, 23 tháng 1, 2019

Một bài sử dụng Stack hay

Đề bài:
https://www.hackerearth.com/fr/practice/data-structures/arrays/1-d/practice-problems/algorithm/the-amazing-race-1/
Lời giải:
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define m 1000000007
#define input() for(i=1;i<=n;i++){scanf("%lld",&a[i]);}
int main()
{
ios::sync_with_stdio(false);
ll i,n,t;
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
ll a[n+1],r[n+1],l[n+1],index[n+1];
input();
stack <ll> s,si;
for(i=n;i>0;i--)
{
while((!s.empty())&&(s.top()<a[i]))
{
s.pop();
si.pop();
}
if(s.empty())
{
r[i]=(n-i);
}
else
{
r[i]=abs(si.top()-i);
}
s.push(a[i]);
si.push(i);
}
while(!s.empty())
{
s.pop();
}
while(!si.empty())
{
si.pop();
}
for(i=1;i<=n;i++)
{
while((!s.empty())&&(s.top()<a[i]))
{
s.pop();
si.pop();
}
if(s.empty())
{
l[i]=(i-1);
}
else
{
l[i]=abs(si.top()-i);
}
s.push(a[i]);
si.push(i);
}
for(i=1;i<=n;i++)
{
index[i] = abs(r[i]+l[i]);

index[i]=(index[i]%m * i%m)%m;
}
ll z=-1;
for(i=1;i<=n;i++)
{
z=max(z,index[i])%m;;
}
for(i=1;i<=n;i++)
{
if(index[i]==z)
break;
}
cout<<i<<endl;
}
return 0;
}

Bài G - Educatioal Round 62

Đề bài: Bạn được cho 1 đồ thị vô hướng đặc biệt. Nó bao gồm $2n$ đỉnh được đánh số từ 1 đến 2n. Dưới đây là một số đặc tính của đồ thị: + ...