题意
给出一个序列,q次询问,每次给出一个数字,序列里小于等于该数字的都被看作是分隔字符,每次输出序列被分成的块数
思路
记录重复比较的结果,给两个序列从大到小排序,然后从大到小开始比较,首先拿出q次询问中最大的那个数字,从大到小依次和序列进行比较,遇到小于等于就break,访问过的加标记,再拿出第二个数字,之前比第一个数大的都不需要重新比较,所以时间会是O(2*n),enmmm,这一题代码还没测试,以为是5:30结束,,,结果没交上。。。
代码
#include<iostream>
#include<vector>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
struct pp
{
int value;
int index;
};
const int maxn=200000+10;
pp inputArr[maxn];
pp qArr[maxn];
int sum[maxn];
bool vis[maxn];
bool cmp(pp a,pp b)
{
return a.value>b.value;
}
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>inputArr[i].value;
inputArr[i].inde