标签:des style class blog code tar
这道题很水就水在没有要求在线算法,全部读进去让我一起输答案,于是差分数列大行其道……
这题本来是拿来练习线段树的,我是不是太直接了……
#include<iostream> #include<cstdlib> #include<cstdio> #include<cstring> using namespace std; int cf[50005]; //差分数列,表示第i-1个和第i个的差,即cf[i]=数列[i]-数列[i-1]; int sum[50005]; //差分数列的前缀和就是原数列。。。 int main() { int i,j,m,n,p,first,last,size; cin>>n; memset(cf,0,sizeof(cf)); memset(sum,0,sizeof(sum)); size=0; for (i=1;i<=n;i++) { cin>>first>>last; cf[first]+=1; cf[last+1]-=1; size=max(last,size); } for (i=0;i<=size;i++) sum[i]=sum[i-1]+cf[i]; cin>>m; for (i=1;i<=m;i++) { cin>>p; cout<<sum[p]<<endl; } return 0; }
(1)看题目要先看清楚是在线还是离线,没有要求强制在线离线还是好用啊。。。
(2)两句老话:差分数列的前缀和是原数列
前缀和的差分数列是原数列
(3)这题特别坑的地方在于
for (i=0;i<=size;i++) sum[i]=sum[i-1]+cf[i];
如果不幸写成:
for (i=1;i<=size;i++) sum[i]=sum[i-1]+cf[i];
就全WA了。。。。。。
【差分数列】tyvj2042线段问题,布布扣,bubuko.com
标签:des style class blog code tar
原文地址:http://www.cnblogs.com/seekdreamer/p/3806743.html