Pagini recente » Cod sursa (job #3187971) | Cod sursa (job #1910133) | Cod sursa (job #1361827) | Cod sursa (job #1704399) | Cod sursa (job #2872015)
#include <bits/stdc++.h>
#define ldb long double
using namespace std;
ifstream fin("dulciuri.in");
ofstream fout("dulciuri.out");
int const N = 1e6;
int q , tip , co , val ;
int xs , ys , xf , yf;
ldb _abs(ldb A){
if(! A)
return 1.0;
return (A > 0 ? A : -A);
}
struct aib{
#define z(x) ((x)&(-x))
ldb v[N + 2];
aib(){fill(v , v + N + 1 , 0);}
void add(int p , ldb x){
for(int i = p ; i <= N + 1 ; i += z(i))
v[i] += x;
}
ldb sum(int p){
if(p == -1) return 0.0;
ldb r = 0.0;
for(int i = p ; i ; i -= z(i))
r += v[i];
return r;
}
ldb query(int l , int r){
if(l > r)
swap(l , r);
return sum(r) - sum(l - 1);
}
}tL , tC;
int main()
{
fin >> q;
int cnt = 0;
for(int i = 1 ; i <= q ; ++ i){
fin >> tip;
if(tip == 1){
fin >> co >> val;
tC.add(co + 1 , val);
}
if(tip == 2){
fin >> co >> val;
tL.add(co + 1 , val);
}
if(tip == 3){
fin >> xs >> ys >> xf >> yf;
if(xs > xf) swap(xs , xf);
if(ys > yf) swap(ys , yf);
++ xs , ++ ys , ++ xf , ++ yf;
if(xs == xf && ys == yf){
fout << fixed << setprecision(10) << tL.query(xs , xs) + tC.query(ys , ys) << '\n';
}else{
if(xs == xf){
fout << fixed << setprecision(10) << tC.query(xs , xs) + tL.query(ys , yf - 1) / abs(yf - ys) << '\n';
}else{
if(ys == yf){
fout << fixed << setprecision(10) << tC.query(xs , xf - 1) / abs(xs - xf) + tL.query(ys , ys) << '\n';
}else{
fout << fixed << setprecision(10) << tC.query(xs , xf - 1) / abs(xs - xf) + tL.query(ys , yf - 1) / abs(ys - yf) << '\n';
}
}
}
}
}
return 0;
}