题意: N个数,找出第二大的数.如果没有输出-1. 思路: UNIQUE的使用. 代码: int a[105]; int n; int main(){ cin>>n; rep(i,0,n-1) cin>>a[i]; sort(a,a+n); int t=unique(a,a+n)-a; //unique只是把重复的数放到了数组的后部分 if(t<2) puts("NO"); else print("%d\n",a[1]); return…
一.unique函数 类属性算法unique的作用是从输入序列中"删除"全部相邻的反复元素. 该算法删除相邻的反复元素.然后又一次排列输入范围内的元素,而且返回一个迭代器(容器的长度没变,仅仅是元素顺序改变了),表示无反复的值范围得结束. // sort words alphabetically so we can find the duplicates sort(words.begin(), words.end()); /* eliminate duplicate words: *…
string strs[] = {"one","one","two","three","three","four"}; vector<); unique(vs.begin(),vs.end()); for(vector<string>::iterator vi = vs.begin();vi!=vs.end();vi++) cout << *vi <&…
1: template <class ForwardIterator> 2: ForwardIterator unique (ForwardIterator first, ForwardIterator last) 3: { 4: if (first==last) 5: return last; 6:  7: ForwardIterator result = first; 8: while (++first != last) 9: { 10: if (!(*result == *first))…
//maximum and minimum     暴力遍历 O(n) //i-th element dicide and conquer random_selected_partition     k(all the element samller than value[k] put left of value[k],all tht elenment larger than value[k] put right) recurrence test if(i=k)return value[k] i…
1613 高端的东西 lower_bounder 函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置.如果所有元素都小于val,则返回last的位置,且last的位置是越界的 然后用map 把数映射成容器 可以简单查询到每个数出现的最前和最后位置 再与给出的L,R相比较 #include <iostream> #include<cstdio> #include<cstring> #include<…
洛谷 Codeforces 思路 一开始想偏想到了DP,后来发现我SB了-- 考虑每个\(a_i<x\)的\(i\),记录它前一个和后一个到它的距离为\(L_i,R_i\),那么就有 \[ ans_k=\sum_{i=1}^n L_iR_{i+k-1} \] 显然把\(L\)数组翻转一下就是一个FFT了. 最后特判\(k=0\). 代码 #include<bits/stdc++.h> clock_t t=clock(); namespace my_std{ using namespace…
Description 题库链接 给你一个长度为 \(n\) 的序列 \(A\) ,和一个数 \(x\) ,对于每个 \(i= 0\sim n\) ,求有多少个非空子区间满足恰好有 \(i\) 个数 \(<x\) . \(1 \leq n \leq 2 \cdot 10^5\) Solution 我们用 \([A_i<x]\) 做一个前缀和,显然这是单调递增的.记前缀和为 \(i\) 的个数为 \(f_i\) . 显然对于 \(i=k,k\neq 0\) 答案就是 \[\sum_{i=0}^{…
Description 给你一个数组 $a_{1 \sim n}$,对于 $k = 0 \sim n$,求出有多少个数组上的区间满足:区间内恰好有 $k$ 个数比 $x$ 小.$x$ 为一个给定的数. Input 第一行$n,x$. 第二行给出$n$个数 Output 一行答案. Sample Input1 5 31 2 3 4 5 Sample Output1 6 5 4 0 0 0 Sample Input2 2 6-5 9 Sample Output2 1 2 0 Sample Input…
题目链接 CF993E 题解 我们记小于\(x\)的位置为\(1\),否则为\(0\) 区间由端点决定,转为两点前缀和相减 我们统计出每一种前缀和个数,记为\(A[i]\)表示值为\(i\)的位置出现的次数 那么对于\(k > 0\)有 \[ans_k = \sum\limits_{x - y = k} A[x]A[y]\] 令 \[B[x] = A[n - x]\] 那么有 \[ans_k = \sum\limits_{x + y = n + k} A[x]B[y]\] 就成了卷积的形式 第\…