QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#96481#6303. InversionLiberty12619WA 2ms3576kbC++201.3kb2023-04-13 22:05:292023-04-13 22:05:31

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-04-13 22:05:31]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3576kb
  • [2023-04-13 22:05:29]
  • 提交

answer

#include<bits/stdc++.h>
#define int long long
#define x first
#define y second
using namespace std;
const int N = 2e3+10,mod = 998244353,INF=1e9+10;
const double eps = 1e-8;
typedef pair<int,int>PII;
typedef pair<int,PII>PIII;
int pos[N],a[N];
int query(int l,int r)
{
    cout<<"? "<<l<<" "<<r<<endl;
    int x;
    cin>>x;
    return x;
}
bool check(int mid,int x)
{
    int cnt=0;
    for(int i=pos[mid]+1;i<x;i++)
        if(a[i]<mid)  cnt++;
    int ans = ((query(pos[mid],x)-query(pos[mid]+1,x)-cnt%2)%2+2)%2;
    return ans;
}
void solve()
{
    int n;
    cin>>n;
    if(n==1)
    {
        cout<<"! "<<1<<endl;
        return;
    }
    int t = query(1,2);
    if(t)
    {
        a[2]=1,pos[1]=2;
        a[1]=2,pos[2]=1;
    }
    else
    {
        a[1]=1,pos[1]=1;
        a[2]=2,pos[2]=2;
    }
    
    for(int i=3;i<=n;i++)
    {
        int l=0,r=i;
        while(l+1<r)
        {
            int mid = l+r>>1;
            if(check(mid,i))    r=mid;
            else    l=mid;
        }
        //if(!check(l,i))l++;
        for(int j=i-1;j>=l;j--) a[pos[j]]++,pos[j+1]=pos[j];
        pos[l]=i,a[i]=l;
    }
    cout<<"! ";
    for(int i=1;i<=n;i++)   cout<<a[i]<<" ";
    cout<<endl;
}
signed main()
{
    int T =1 ;
    while(T--)
    {
        solve();
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 3576kb

input:

3
0
0
1

output:

? 1 2
? 1 3
? 2 3
! 2 3 0 

result:

wrong output format Unexpected end of file - token expected