Pagini recente » Cod sursa (job #1259862) | Cod sursa (job #2983161) | Cod sursa (job #702083) | Cod sursa (job #2934889) | Cod sursa (job #2871690)
#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 , a , b , c , d;
struct aib{
#define z(x) ((x)&(-x))
int v[N + 1];
aib(){fill(v , v + N + 1 , 0);}
void add(int p , int x){
for(int i = p ; i <= N ; i += z(i))
v[i] += x;
}
int sum(int p){
if(p < 0) return 0;
int r = 0;
for(int i = p ; i ; i -= z(i))
r += v[i];
return r;
}
int query(int l , int r){
if(l > r)
swap(l , r);
return sum(r) - sum(l - 1);
}
}tL , tC;
int main()
{
fin >> q;
for(int i = 1 ; i <= q ; ++ i){
fin >> tip;
if(tip == 1){
fin >> co >> val;
tC.add(co , val);
}
if(tip == 2){
fin >> co >> val;
tL.add(co , val);
}
if(tip == 3){
fin >> a >> b >> c >> d;
if(a == c && b == d){
fout << fixed << setprecision(10) << 1.0 * tC.query(a , c) + tL.query (b , d) << '\n';
continue;
}
if(a == c){
ldb vy = 1.0 / abs(b - d);
fout << fixed << setprecision(10) << 1.0 * tC.query(a , c) + vy * tL.query(b , d) << '\n';
}else{
if(b == d){
ldb vx = 1.0 / abs(c - a);
fout << fixed << setprecision(10) << 1.0 * tC.query(a , c) * vx + tL.query(b , d) << '\n';
}else{
ldb vx = 1.0 / abs(c - a);
ldb vy = 1.0 / abs(b - d);
fout << fixed << setprecision(10) << vx * tC.query(a , c) + vy * tL.query(b , d) << '\n';
}
}
}
}
return 0;
}