题目来源:http://codeforces.com/contest/1215/problem/B
赛中被题目搞了心态,刚开始想的差不多以负数为分界点,分区间想就行了,但还是学长写的更为简洁啊。
比赛里心态还是要放平放稳,冷静不要毛躁。
分完区间之后直接判断奇数还是偶数区间就行了,也就是正数不变,直接把上一次的累加到这个数上,负数相反。
总数直接(以i为结尾有多少种情况1+2+...+i)1+2+....+n=n*(n+1)/2种情况减去即可得另一种。
(菜是原罪)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<cmath>
#include<string>
#include<stack>
#include<set>
#include<map>
using namespace std;
typedef long long ll;
int a[200100];
int main()
{
int n,i,j;
scanf("%d",&n);
ll h1=0,h2=0;
ll sum1=0,sum2=0;
ll hh=(n+1)*n/2;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]<0)
{
swap(h1,h2);
h2++;
}
else
h1++;
sum1+=h1,sum2+=h2;
}
printf("%I64d %I64d",sum2,sum1);
return 0;
}