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;
    }
    
  • 相关阅读:
    8 组合
    7 继承与派生
    防止伪造跨站请求(转)
    HTML5 拖拽效果实现
    yii2.0 文件上传
    div光标定位问题总结
    可编辑DIV (contenteditable="true") 在鼠标光标处插入图片或者文字
    Linux下搭建Nginx+MySQL+PHP
    GitHub初体验
    Mac下配置Apache + Php + Mysql环境
  • 原文地址:https://www.cnblogs.com/dsrdsr/p/9787679.html
Copyright © 2011-2022 走看看