codeforces gym 100187M Heaviside Function
//大概就是没想起来怎么做
解法:首先观察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分别求出两种情况下的解,加起来就是答案
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 #include<cstdlib> 7 #include<queue> 8 #include<vector> 9 #include<map> 10 #include<stack> 11 #include<string> 12 #define LL long long 13 14 using namespace std; 15 16 int n,m; 17 int t1=0,t2=0; 18 int f1[200001],f2[200001]; 19 20 int main(){ 21 scanf("%d",&n); 22 for (int i=0;i<n;i++){ 23 int x,y; 24 scanf("%d%d",&x,&y); 25 if (x==1) 26 f1[t1++]=y; 27 else 28 f2[t2++]=y; 29 } 30 sort(f1,f1+t1); 31 sort(f2,f2+t2); 32 scanf("%d",&m); 33 for (int i=0;i<m;i++){ 34 int x; 35 scanf("%d",&x); 36 int ans1=upper_bound(f1,f1+t1,x)-f1; 37 int ans2=upper_bound(f2,f2+t2,-x)-f2; 38 printf("%d\n",ans1+ans2); 39 } 40 return 0; 41 } 42 /* 43 6 44 1 3 45 -1 2 46 1 9 47 -1 2 48 1 7 49 -1 2 50 8 51 0 12 2 8 4 -3 7 9 52 */