• loj 诗歌


    链接

    链接

    思路

    好久之前的考试题了吧,之前貌似抄的题解
    现在理解了怕忘了,就写个题解记录一下吧,题目还是不错的
    枚举中间点j

    [H_{i}-H_{j}=H_{j}-H_{k} ]

    [H_{k}+H_{i}=2*H_{j} ]

    由于H是一种n的排列,所以取值就是([1,n])
    那就可以求出(H_{k})(H_{k})的取值范围来了(处理一下边界,稳得一批)
    如果取值范围内出现的数字的个数是奇数,那就说明还有一个数字在后面
    这样就能A啦
    还有一种是
    求出取值范围内的数字的和
    然后$ %2*H_{i}$
    如果不是0,说明成立,参见上面式子
    这里只提供第一种代码,第二种自己写吧

    代码

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=3e5+7;
    int n,a[maxn];
    int lowbit(int x) {return x&-x;}
    struct node {
    	int sum[maxn];
    	void add(int x,int ad) {
    		for(;x<=n;x+=lowbit(x)) sum[x]+=ad;
    	}
    	int query(int x) {
    		int ans=0;
    		for(x;x>=1;x-=lowbit(x)) ans+=sum[x];
    		return ans;
    	}
    }tree;
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i) scanf("%d",&a[i]);
    	for(int i=1;i<=n;++i) {
    		int L=max(1,2*a[i]-n);
    		int R=min(n,2*a[i]-1);
    		if((tree.query(R)-tree.query(L-1)) & 1) return puts("YES"),0;
    		tree.add(a[i],1); 
    	}
    	puts("NO");
    	return 0;
    }
    
  • 相关阅读:
    vm扩容
    手算二维离散傅里叶变换
    取消vim模式匹配的高亮
    DS DI ES SI等等
    int and Integer
    为什么超类能引用子类的对象
    voltile解析
    java集合
    疑问:无限定通配符
    layui table 导出
  • 原文地址:https://www.cnblogs.com/dsrdsr/p/9787679.html
Copyright © 2020-2023  润新知