Gym-101341M (simple simulation)
This question is troublesome, the first method is right, but I didn’t dare to type it but it’s okay hhh
#include <iostream>
#include <vector>
using namespace std;
const int N = 200000 + 10;
typedef long long ll;
ll sum = 0;
int a[N], n;
vector<int> v1, v2;
int main()
{
scanf("%d", &n);
for(int i=1;i<=n;i++)
{
scanf("%d", &a[i]);
sum += a[i];
}
if(sum > n)
{
printf("NO\n");
return 0;
}
int flag = 1;
int pos = n;
for(int i=n;i>=1;i--)
{
if(a[i] > 0)
{
for(int j=pos;j>=pos-a[i]+1;j--)
{
if(i >= j) flag = 0;
v1.push_back(i);
v2.push_back(j);
}
}
pos = pos-a[i];
}
if(flag == 0)
{
printf("NO\n");
return 0;
}
printf("YES\n");
for(int i=0;i<v1.size();i++)
{
printf("%d %d\n", v1[i], v2[i]);
}
}