codeforces 622C C. Not Equal on a Segment】的更多相关文章

C. Not Equal on a Segment time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given array a with n integers and m queries. The i-th query is given with three integers li, ri, xi. For th…
C. Not Equal on a Segment 题目连接: http://www.codeforces.com/contest/622/problem/C Description You are given array a with n integers and m queries. The i-th query is given with three integers li, ri, xi. For the i-th query find any position pi (li ≤ pi …
C. Not Equal on a Segment time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given array a with n integers and m queries. The i-th query is given with three integers li, ri, xi. For th…
题目链接: http://codeforces.com/problemset/problem/622/C 题意: 给定序列,若干查询,每个查询给定区间和t,输出区间内任意一个不等于t的元素的位置. 分析: 最初没看样例直接钦定输出每个不等于t的元素位置,结果怎么想都是n2复杂度的,后来看了样例才发现是输出任意一个.. 对于一个区间,如果区间最大值和最小值相等,那么该区间元素值全部相同,那么我们维护区间的最大最小值,然后判断是否均等于t,若不等,输出最大值或最小值的位置即可,若相等, 则该区间所有…
预处理p[i],p[i]表示:[p[i],i]这段闭区间上所有数字都是a[i] 询问的时候,如果xi==a[ri]并且p[ri]<=li,一定无解 剩下的情况都是有解的,如果xi!=a[ri],那么输出ri,否则输出p[ri]-1. 另外,看到有大牛博客说可以用线段树,大致是这样的: 线段树保存区间最大值与最小值, 如果询问的区间上最小值==最大值,那么无解: 剩下的情况都是有解:如果xi不等于最小值,那么输出最小值位置:如果xi不等于最大值,那么输出最大值位置. #include <stdi…
[题目]D. Huffman Coding on Segment [题意]给定n个数字,m次询问区间[l,r]的数字的哈夫曼编码总长.1<=n,m,ai<=10^5. [算法]哈夫曼树+莫队+分块 [哈夫曼树]哈夫曼树又称最优构造树,n个数字的哈夫曼树是含有n个给定权值叶子的点权路径和最小的二叉树. 点权路径和(WPL)可以表示为每个点的深度*权值. 构造方法:每次取点权最小的两个根节点作为左右子树(左小右大)组成新根节(点权为左右之和),多次操作直到只剩一棵树.(类似合并果子) 哈夫曼树的W…
题目链接: http://codeforces.com/problemset/problem/622/C 题目大意: 给定一个长度为n(n不超过200000)的序列,有m(m不超过200000)次询问,第i次询问一个区间[li,ri]内是否存在一个数不等于一个给定值x.如果存在,就输出这个数的位置,否则输出-1. 解题思路: 预处理一个数组p[n].p[i]表示从位置i向左一直到位置0,第一个不等于a[i]的数的位置.可以以o(n)的复杂度通过对递推实现.具体来说就是首先令p[0]=-1,然后从…
题目链接:http://codeforces.com/problemset/problem/1154/B 题意:给定数组,可以给任意的的元素加上D 或者 减去D,如果能 使数组元素都相等,输出最小的D,不能输出-1. 思路:若要相等,唯有种类数小于3的才可以. AC代码: #include<bits/stdc++.h> using namespace std; int main() { int n; ]; int x,y,z; set<int> st; cin >> n…
题目链接 假设始终可以找到一种状态使得值为0, 那么两个1之间需要隔n-2个数, 两个2之间需要隔n-3个数, 两个3之间隔n-4个数. 我们发现两个三可以放到两个1之间, 同理两个5放到两个3之间....这样就构造好了. #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <cmat…
题意: 给你一个数组,m个询问,l,r,x;让你输出在区间[ l , r ]上哪个位置不等于x. 思路: 额..我这个思路还是剽来的...不过真心赞啊. 开个p数组,直接记录数组每个元素的位置,并且实现是最右. 然后对于每个查询,直接询问下限位置的a[ i ]是否等于x,不等于直接输出,等于的话调用p数组,就可以知道,最右啊,然后判断一下最右+1是否<=上限.然后就好啦.这种效率超级提高啊.长见识,长见识. code- //#include <bits/stdc++.h> #includ…