zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    Servlet入门
    序列化
    ConcurrentHashMap红黑树的实现
    ConcurrentHashMap1.7和1.8的源码分析比较
    TCP/IP中的传输层协议TCP、UDP
    Java内存模型和ConcurrentHashMap 1.7源码分析
    JAVA研发面试题
    面试题(Python)
    初识Python
    Python解释器安装与环境变量添加
  • 原文地址:https://www.cnblogs.com/dsrdsr/p/9787679.html
Copyright © 2011-2022 走看看