Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- typedef int Huge[220];
- void AtribValue(Huge H,int X)
- {
- H[0]=0;
- while(X)
- ++H[0],H[H[0]]=X%10,X/=10;
- }
- void Copy(Huge A,Huge B) /// A <- B
- {
- for(int i=0;i<=B[0];++i)
- A[i]=B[i];
- }
- void Add(Huge A,Huge B) /// A <- A+B
- {
- int i,T=0;
- if(B[0]>A[0])
- {
- for(i=A[0]+1;i<=B[0];)
- A[i++]=0;
- A[0]=B[0];
- }
- else
- for(i=B[0]+1;i<=A[0];)
- B[i++]=0;
- for(i=1;i<=A[0];++i)
- A[i]+=B[i]+T,T=A[i]/10,A[i]%=10;
- if(T)
- A[++A[0]]=T;
- }
- void Subtract(Huge A,Huge B) /// A <- A-B
- {
- int i,T=0;
- for(i=B[0]+1;i<=A[0];)
- B[i++]=0;
- for(i=1;i<=A[0];i++)
- A[i]+=(T=(A[i]-=B[i]+T)<0)?10:0;
- while(!A[A[0]])
- A[0]--;
- }
- int main()
- {
- int n,q;
- ifstream f("fibointerval.in");
- f>>n>>q;
- Huge F[n+3];
- AtribValue(F[0],0);
- AtribValue(F[1],1);
- AtribValue(F[2],1);
- for(int i=3;i<=n+2;++i)
- Copy(F[i],F[i-2]),Add(F[i],F[i-1]);
- int a,b;
- Huge SUM;
- ofstream g("fibointerval.out");
- while(q--)
- {
- f>>a>>b;
- for(int i=F[a][0];i>0;--i)
- g<<F[a][i];
- g<<' ';
- for(int i=F[b][0];i>0;--i)
- g<<F[b][i];
- g<<' ';
- Copy(SUM,F[b+2]);
- Subtract(SUM,F[a+1]);
- for(int i=SUM[0];i>0;--i)
- g<<SUM[i];
- g<<'\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement