评测记录 差不多是一半AC一半TLE
应该是要用二分(但是本人二分学的不好)问问dalao对于这段程序如何合理安排二分???
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=200005;
int x[maxn];
int xishu;//用于存储x的系数
char xx;//临时存储x
char c;//存储+-号
int c1;//存储=左边的常数
char c2;//存储等号
int c3;//存储等号右边的常数
signed main ()
{
int n;
int q;
cin>>n>>q;
for(int i=1; i<=n; i++)
{
cin>>xishu>>xx>>c>>c1>>c2>>c3;
if(c=='+')
{
x[i]=(c3-c1)/xishu;//用于求出方程的解
}
if(c=='-')
{
x[i]=(c3+c1)/xishu;
}
//cout<<x[i]<<"\n";
}
sort(x+1,x+n+1);
while(q--)
{
int ans=0;
int l,r;
cin>>l>>r;
for(int i=l; i<=r; i++)//挨个枚举
{
for(int j=1; j<=n; j++)
{
if(x[j]==i)
{
ans++;
if(x[j]==x[j+1])
{
ans--;
}//单纯就是为了去重
//把刚刚因为重复加上去的再减掉
//问题就是如何把这个合理加到二分里
}
}
}
cout<<ans<<"\n";
}
return 0;
}