Submission #990561

#TimeUsernameProblemLanguageResultExecution timeMemory
990561alexddMađioničar (COI22_madionicar)C++17
100 / 100
1297 ms1552 KiB
#include<bits/stdc++.h>
using namespace std;
int n,cntq;

string s;
bool verif(int le, int ri)
{
    for(int i=0;i<=ri-le;i++)
        if(s[le+i]!=s[ri-i])
            return 0;
    return 1;
}

int p[100005];
bool query(int le, int ri)
{
    if(le<1 || ri>n || le>ri)
        return 0;
    if(le==ri)
        return 1;
    cntq++;
    //return verif(le,ri);
    if(cntq>200000)
    {
        while(1);
    }
    int aux;
    cout<<"? "<<le<<" "<<ri<<endl;
    cin>>aux;
    return aux;
}
signed main()
{
    cin>>n;

    /*s.resize(n+2);
    for(int i=1;i<=n;i++)
    {
        int c = rand()%26;
        s[i] = c+'a';
    }*/

    int mxm=1;
    for(int i=1;i<n;i++)
    {
        p[i] = mxm/2;
        while(query(i-p[i],i+1+p[i]))
            p[i]++;
        mxm = max(mxm, 2*p[i]);
    }
    for(int i=1;i<=n;i++)
    {
        p[i] = (mxm+1)/2;
        while(query(i-p[i],i+p[i]))
            p[i]++;
        mxm = max(mxm, 2*p[i]-1);
    }
    cout<<"! "<<mxm<<endl;
   // cout<<cntq<<" queries\n";
    return 0;
}
/**
neven

1 2 3 4 5 6 7 8 9
    l       r
    a b c b a

1 2 3 4 5 6 7 8 9
    l         r
    a b c c b a
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...