This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <algorithm>
#include <utility>
#include <cstring>
#define f first
#define s second
using namespace std;
bool comp( pair < pair <int, int> , int> a, pair < pair <int, int> , int> b)
{
    if (a.f.f != b.f.f)
        return a.f.f < b.f.f;
    else
        return a.f.s < b.f.s;
}
int main()
{
    ios_base::sync_with_stdio(false);
	cin.tie(NULL);
    int n, k, q;
    cin >> n >> k >> q;
    int a[n], sign[k][k];
    memset(sign, 0, sizeof(sign));
    for (int i=0; i<n; i++)
    {
        cin >> a[i];
        a[i]--;
    }
    // cout << __LINE__ << endl;
    
    pair < pair <int, int>, int>  query[q];
    int ans[q];
    for (int i=0; i<q; i++)
    {
        // cout << __LINE__ << endl;
        ans[i]=-1;
        cin >> query[i].f.f >> query[i].f.s;
        query[i].s = i;
    }
    sort(query, query+q, comp);
    // cout << __LINE__ << endl;
    int left=0, right=0, pos=0;
    bool curr=true;
    while (pos<q)
    {
        // cout << __LINE__ << endl;
        int f=query[pos].f.f, s=query[pos].f.s;
        if (left != f)
            memset(sign, 0, sizeof(sign));
        while (left < f)
        {
            // cout << __LINE__ << endl;
            left++;
            right = left;
            curr=true;
        }
        bool fail=false;
        while (query[pos].f.f == left)
        {
            int x=1;
            // cout << __LINE__ << endl;
            if (fail || a[right] == a[right+1] || sign[a[right]][a[right+1]]!=-x)
            {
                fail=true;
                // cout << __LINE__ << endl;
                ans[query[pos].s]=0;
                pos++;
            }
            else if (sign[a[right]][a[right+1]]==0 || sign[a[right]][a[right+1]]==x)
            {
                // cout << __LINE__ << endl;
                sign[a[right]][a[right+1]]=x;
                sign[a[right+1]][a[right]]=-x;
            }
            x=-x;
            // cout << __LINE__ << endl;
        }
        pos++;
        // cout << __LINE__ << endl;
    }
    for (int i=0; i<q; i++)
    {
        if (ans[i])
            cout << "YES\n";
        else
            cout << "NO\n";
    }
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:6:11: warning: unused variable 'second' [-Wunused-variable]
    6 | #define s second
      |           ^~~~~~
Main.cpp:52:31: note: in expansion of macro 's'
   52 |         int f=query[pos].f.f, s=query[pos].f.s;
      |                               ^
Main.cpp:48:10: warning: variable 'curr' set but not used [-Wunused-but-set-variable]
   48 |     bool curr=true;
      |          ^~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |