比赛 20151019 评测结果 EEWWTTTTEE
题目名称 学数数 最终得分 0
用户昵称 明天 运行时间 5.572 s
代码语言 C++ 内存使用 4.89 MiB
提交时间 2015-10-19 22:01:56
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const int maxn=100000+10;
int n,q,a[maxn],f[maxn];//f[i]表示当前下标为结尾的连续子数组的最大值 
int g[1000000+1];
int y;
int main()
{
	freopen("jxthree.in","r",stdin);
	freopen("jxthree.out","w",stdout);
	
	cin>>n>>q;
	for (int i=1; i<=n; i++)
	{
		scanf("%d",&a[i]);
		y+=a[i];//最大连续子数组的和 
	}
		
	
	for (int i=1; i<=n; i++)
	{
		memset(f,0,sizeof(f));
		f[i]=a[i];
		g[f[i]]++;
		for (int j=i+1; j<=n; j++)
		{
			f[j]=f[j-1];
			if (f[j]<a[j])
				f[j]=a[j];
			g[f[j]]++;
		}
	}
	char ch;
	int x,ans;
	for (int k=1; k<=q; k++)
	{
		cin>>ch>>x;
		switch(ch)
		{
			case '=': cout<<g[x]<<endl; break;
			case '<':
				ans=0;
				for (int i=1; i<x; i++)
				{
					ans+=g[i];
				}
				cout<<ans<<endl;
				break;
			case '>':
				ans=0;
				for (int i=x+1; i<=y+1; i++)
				{
					ans+=g[i];
				}
				cout<<ans<<endl;
				break;
		}
	}
	return 0;
}