Submission #1208016

#TimeUsernameProblemLanguageResultExecution timeMemory
1208016dksnfjkfnwkfwAlternating Heights (CCO22_day1problem1)C++20
17 / 25
1097 ms28016 KiB
#include <bits/stdc++.h>
using namespace std;

#define sonic ios_base::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define IO(main) if(fopen(main".inp","r")){freopen(main".inp","r",stdin);freopen(main".out","w",stdout);}
#define pb push_back
#define fi first
#define se second
#define mp make_pair
#define ins insert
#define pb push_back
#define el cout << endl
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(), (x).end()
#define MASK(i) ((1LL)<<(i))
#define BIT(x,i) (((x)>>(i))&(1LL))
#define FOR(i, a, b) for(int (i)=(a);(i)<=(b); i++)
#define FORD(i, a, b) for(int (i)=(a);(i)>=(b); i--)


using ll = long long;
using ull = unsigned long long;
using ld = long double;

using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using vii = vector<pii>;

const int N = 1e6 + 9;
const int mod = 1e9 + 7;
const ll INF = 1e18 + 7;
const int base = 31;
const int LOG = 20;
const ll MOD = 1e9 + 7;

int mul(int x, int y) {return 1LL * x * y % mod;}
int calPw(int x, int y)
{
    int ans = 1;
    while(y)
    {
        if (y&1) ans = 1LL * ans * x % mod;
        x = 1LL * x * x % mod;
        y >>= 1;
    }
    return ans;
}
int d4x[4] = {1, 0, -1, 0};
int d4y[4] = {0, 1, 0, -1};
int dx[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int dy[8] = {1, 1, 0, -1, -1, -1, 0, 1};
///Author: Le Chi Thien Luong The Vinh high school 2008
///code
void Solve(){

}
int n, k, q;
ll a[N], vis[N], ans[N];
vector<int>adj[N];
bool dfs(int u){
    vis[u] = 1;
    for(int v : adj[u]){
        if(vis[v] == 0){
            if(dfs(v))return true;
        }
        else if(vis[v] == 1)return true;
    }
    vis[u] = 2;
    return false;
}
bool check(int l, int r){
    FOR(i, 1, n){
        adj[i].clear();
        vis[i] = 0;
    }
    int ok = 1;
    FOR(i, l, r - 1){
        if(ok)adj[a[i]].push_back(a[i + 1]);
        else adj[a[i + 1]].push_back(a[i]);
        ok^=1;
    }
    FOR(i, 1, k){
        if(dfs(i))return false;
    }
    return true;
}
void Read(){
    cin >> n >> k >> q;
    FOR(i, 1, n){
        cin >> a[i];
    }
    FOR(i, 1, n){
        int l = i, r = n;
        while(l <= r){
            int mid = l + r >> 1;
            if(check(i, mid)){
                l = mid + 1;
                ans[i] = mid;
            }
            else r = mid - 1;
        }
    }
    while(q--){
        int u, v;
        cin >> u >> v;
        if(ans[u] >= v)cout << "YES" << endl;
        else cout << "NO" << endl;
    }
}



int main()
{
    sonic;

    int TEST = 1;
   // cin >> TEST;
    while(TEST--)
    {

        Read();
        Solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...