//有点坑啊,我用cout输出就超时,改用printf就ac了 #include <iostream> #include <vector> #define minn -10000 using namespace std; typedef long long ll; inline int read(){ int x = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if (ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9'){ x = (x<<1) + (x<<3) + (ch^48); ch = getchar(); } return x * f; } int n; ll cnt=0; int arr[200005]; int brr[200005]; void _merge(int l,int mid,int r) { int p1=l,p2=mid+1; for(int i=l;i<=r;i++) { if((p1<=mid)&&((arr[p1]<=arr[p2])||(p2>r))) { brr[i]=arr[p1]; p1++; } else { cnt+=mid-p1+1; brr[i]=arr[p2]; p2++; } } for(int i=l;i<=r;i++) arr[i]=brr[i]; } void erfen(int l,int r) { int mid=(l+r)>>1; if(l<r) { erfen(l,mid); erfen(mid+1,r); } _merge(l,mid,r); } int main() { int m; n=read(); for(int i=1;i<=n;i++) arr[i]=read(); m=read(); erfen(1,n); int flag=0; if(cnt&1) flag=1;//原来顺序的结果是奇还是偶 while(m--) { int l,r; l=read();r=read(); int pd=(r-l)*(r-l+1)/2; if(pd&1) flag^=1;//若颠倒的区间组合数是偶数则无影响,奇数的话必有影响,因为逆序和顺序一奇一偶 if(flag) printf("dislike\n");//奇数就不喜欢 else printf("like\n"); } }