您的位置:首页 > 其它

codeforces gym 100187M Heaviside Function

2015-07-18 21:46 369 查看
//大概就是没想起来怎么做

解法:首先观察seitan方程,发现我们要找的是满足seitan(si*x-ai)=1的方程数,即si*x-ai>=0的方程数,因为si=1 or -1,于是分类讨论,当si=1时相当于给定每个x求满足ai<=x的ai数,当si=-1时相当于给定每个x求ai<=-1的方程数,于是我们把si=1和si=-1时的系数ai分别用两个数组记录下来,然后排序,用upper_bound分别求出两种情况下的解,加起来就是答案

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#include<string>
#define LL long long

using namespace std;

int n,m;
int t1=0,t2=0;
int f1[200001],f2[200001];

int main(){
scanf("%d",&n);
for (int i=0;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
if (x==1)
f1[t1++]=y;
else
f2[t2++]=y;
}
sort(f1,f1+t1);
sort(f2,f2+t2);
scanf("%d",&m);
for (int i=0;i<m;i++){
int x;
scanf("%d",&x);
int ans1=upper_bound(f1,f1+t1,x)-f1;
int ans2=upper_bound(f2,f2+t2,-x)-f2;
printf("%d\n",ans1+ans2);
}
return 0;
}
/*
6
1 3
-1 2
1 9
-1 2
1 7
-1 2
8
0 12 2 8 4 -3 7 9
*/


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: