比赛 |
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;
}