Cod sursa(job #856814)

Utilizator BalcauIonutFMI-Balcau Ionut BalcauIonut Data 16 ianuarie 2013 23:10:31
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<math.h>
using namespace std;
  

  
int a[15001], b[130], n, nr, r;
ifstream f("datorii.in");
ofstream g("datorii.out");
void update(int z,int val)
{
    z--;
    a[z]-=val;
    b[z/r]-=val;
}
  
void swap(int z1,int z2){   
    int s=0,i;
    z1--;
    z2--;
    int a1,a2;
    a1=z1/r;
    a2=z2/r;
    if(a1==a2)
        for(i=z1;i<=z2;i++)
            s+=a[i];
    else{
        int x;
        x=(a1+1)*r;
        for(i=z1;i<x;i++)
            s+=a[i];
        for(i=a1+1;i<a2;i++)
            s+=b[i];
        x=a2*r;
         
        for(i=x;i<=z2;i++)
            s+=a[i];
    }
    printf("%d\n",s);
}
int main(){
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    int m;
    double k;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
        scanf("%d",a+i);
    k=n;
    k=sqrt(k);
    r=int(k);
    nr=0;
    for(int i=1;i<n;i++){   
            if(i%r==0)
                ++nr;
            b[nr]+=a[i];
        }
    int x,y,cod;
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&cod,&x,&y);
        if(cod==0)
            update(x,y);
        else
            swap(x,y);
    }
      
    return 0;
}