Pagini recente » Cod sursa (job #2838822) | Cod sursa (job #1136236) | Cod sursa (job #1165108) | Cod sursa (job #3165286) | Cod sursa (job #2817806)
//#include <fstream>
#define mF "datorii"
/*std::ifstream in(mF ".in");
std::ofstream out(mF ".out");*/
#include <stdio.h>
#include <ctype.h>
class InParser {private: FILE *fin; char *buff; int sp; char read_ch() { ++sp; if (sp == 4096) { sp = 0; fread(buff, 1, 4096, fin); } return buff[sp]; } public: InParser(const char* nume) { fin = fopen(nume, "r"); buff = new char[4096](); sp = 4095; } InParser& operator >> (int &n) { char c; while (!isdigit(c = read_ch()) && c != '-'); int sgn = 1; if (c == '-') { n = 0; sgn = -1; } else { n = c - '0'; } while (isdigit(c = read_ch())) { n = 10 * n + c - '0'; } n *= sgn; return *this; } InParser& operator >> (long long &n) { char c; n = 0; while (!isdigit(c = read_ch()) && c != '-'); long long sgn = 1; if (c == '-') { n = 0; sgn = -1; } else { n = c - '0'; } while (isdigit(c = read_ch())) { n = 10 * n + c - '0'; } n *= sgn; return *this; } }
in(mF ".in");
class OutParser {private: FILE *fout; char *buff; int sp; void write_ch(char ch) { if (sp == 50000) { fwrite(buff, 1, 50000, fout); sp = 0; buff[sp++] = ch; } else { buff[sp++] = ch; } } public: OutParser(const char* name) { fout = fopen(name, "w"); buff = new char[50000](); sp = 0; } ~OutParser() { fwrite(buff, 1, sp, fout); fclose(fout); } OutParser& operator << (int vu32) { if (vu32 <= 9) { write_ch(vu32 + '0'); } else { (*this) << (vu32 / 10); write_ch(vu32 % 10 + '0'); } return *this; } OutParser& operator << (long long vu64) { if (vu64 <= 9) { write_ch(vu64 + '0'); } else { (*this) << (vu64 / 10); write_ch(vu64 % 10 + '0'); } return *this; } OutParser& operator << (char ch) { write_ch(ch); return *this; } OutParser& operator << (const char *ch) { while (*ch) { write_ch(*ch); ++ch; } return *this; } }
out(mF ".out");
int V[45000], n, a, b; struct W {int i = 0, j = n, k = 1;
W A() {return {i, i+j>>1, k<<1};}
W B() {return {i+j>>1, j, (k<<1)+1};}
int& V() {return ::V[k];} bool I() {return i != j-1;}
bool J(int k) {return i <= k and k < j;}
bool K(W w) {return J(w.i) and J(w.j-1);}
bool L(W w) {return w.J(i) or w.J(j-1);}
void F() {V() = A().V() + B().V();}};
void A(W w = {})
{if (w.I()) A(w.A()), A(w.B()), w.F(); else in >> w.V();}
int B(W w = {})
{
return W{a, b}.K(w)? w.V(): W{a, b}.L(w)?
B(w.A()) + B(w.B()): 0;
}
void C(W w = {})
{
if (w.I()) C(w.A().J(a)? w.A(): w.B()), w.F();
else w.V() -= b;
}
int main()
{
int q; in >> n >> q; A(); while (q--)
{
int c; in >> c >> a >> b; a--;
if (c) out << B() << '\n'; else C();
}
}