Skip to content

Commit 823c6c6

Browse files
committed
regular update
1 parent 15329fc commit 823c6c6

File tree

9 files changed

+301
-0
lines changed

9 files changed

+301
-0
lines changed

Codeforces/258E_157.cpp

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <vector>
4+
#include <cstring>
5+
6+
using namespace std;
7+
8+
const int N = 100011;
9+
10+
int L[N<<2], R[N<<2], d[N<<2], cnt[N<<2];
11+
vector<int> ad[N];
12+
13+
inline int sz (int u) { return R[u] - L[u] + 1;}
14+
void build (int u, int x, int y) {
15+
L[u] = x; R[u] = y; d[u] = 0; cnt[u] = 0;
16+
if (x < y) {
17+
int mid = (x + y) / 2;
18+
build (u * 2, x, mid);
19+
build (u * 2 + 1, mid + 1, y);
20+
}
21+
}
22+
23+
void maintain (int u) {
24+
if (d[u])
25+
cnt[u] = sz(u);
26+
else
27+
cnt[u] = L[u] == R[u] ? 0 : cnt[u<<1] + cnt[u<<1|1];
28+
}
29+
30+
void update (int u, int x, int y, int v) {
31+
if (x <= L[u] && y >= R[u]) {
32+
d[u] += v;
33+
maintain(u);
34+
return;
35+
}
36+
37+
int mid = (L[u] + R[u]) / 2;
38+
if (x <= mid)
39+
update (u * 2, x, y, v);
40+
if (y > mid)
41+
update (u * 2 + 1, x, y, v);
42+
43+
maintain (u);
44+
if (!d[u])
45+
cnt[u] = cnt[u<<1] + cnt[u<<1|1];
46+
}
47+
48+
int be[N], en[N];
49+
int no;
50+
vector<int> b[N];
51+
int ans[N];
52+
53+
void DFS (int x, int pre) {
54+
be[x] = ++no;
55+
int i, k = ad[x].size ();
56+
for (i = 0; i < k; ++i) {
57+
int y = ad[x][i];
58+
if (y != pre) DFS (y, x);
59+
}
60+
en[x] = no;
61+
}
62+
63+
void cal (int x, int pre) {
64+
int i, k = b[x].size ();
65+
for (i = 0; i < k; ++i)
66+
update (1, be[b[x][i]], en[b[x][i]], 1);
67+
68+
ans[x] = cnt[1];
69+
k = ad[x].size ();
70+
for (i = 0; i < k; ++i) {
71+
int y = ad[x][i];
72+
if (y != pre) cal (y, x);
73+
}
74+
k = b[x].size ();
75+
for (i = 0; i < k; ++i)
76+
update (1, be[b[x][i]], en[b[x][i]], -1);
77+
78+
}
79+
int n, m;
80+
81+
int main () {
82+
int i, j, k;
83+
scanf ("%d%d", &n, &m);
84+
build (1, 1, n);
85+
86+
for (k = 1; k < n; ++k) {
87+
scanf ("%d%d", &i, &j);
88+
ad[i].push_back (j);
89+
ad[j].push_back (i);
90+
}
91+
no = 0;
92+
memset (ans, 0, sizeof (ans));
93+
DFS (1, 0);
94+
for (; m; --m) {
95+
scanf ("%d%d", &i, &j);
96+
b[i].push_back (i); b[i].push_back (j);
97+
b[j].push_back (i); b[j].push_back (j);
98+
}
99+
cal (1, 0);
100+
for (i = 1; i <= n; ++i)
101+
printf ("%d%c", ans[i]? ans[i] - 1 : 0, i == n ? '\n' : ' ');
102+
return 0;
103+
}

Codeforces/280A_172.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <cstdio>
2+
#include <iostream>
3+
#include <cstring>
4+
#include <cmath>
5+
#include <string>
6+
#include <vector>
7+
#include <map>
8+
#include <set>
9+
#include <algorithm>
10+
#include <queue>
11+
12+
using namespace std;
13+
14+
int main () {
15+
long double w, h, a, p, q, x, y, b;
16+
17+
scanf ("%Lf%Lf%Lf", &w, &h, &a);
18+
if (w < h) swap (w, h);
19+
if (a > 90) a = 180 - a;
20+
if (a == 90) {
21+
printf ("%.15Lf\n", h * h);
22+
return 0;
23+
}
24+
a = a / 180 * acos(-1.0);
25+
if (tan(a/2) * w < h) {
26+
p = 1 + sqrt (1 + tan(a) * tan(a));
27+
q = tan(a);
28+
y = (h * p - w * q) / (p*p - q*q);
29+
b = (h * q - w * p) / (q*q - p*p);
30+
//cout << w * h - y*y*tan(a) - b*b*tan(a) << endl;
31+
printf ("%.15Lf\n", w * h - y*y*tan(a) - b*b*tan(a));
32+
}
33+
else{
34+
//cout << w * h- h * h / tan(a) - h * (w - h * (1/tan(a) + 1/sin(a))) << endl;
35+
printf("%.15Lf\n", h*h/sin(a));
36+
}
37+
return 0;
38+
}

Codeforces/280B_172.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include <cstdio>
2+
#include <iostream>
3+
#include <cstring>
4+
#include <string>
5+
#include <vector>
6+
#include <map>
7+
#include <set>
8+
#include <algorithm>
9+
#include <queue>
10+
11+
using namespace std;
12+
13+
const int N = 100011;
14+
int a[N], f[N], st[N], top;
15+
int n;
16+
17+
int main () {
18+
int i, j, k;
19+
scanf ("%d", &n);
20+
for (i = 1; i <= n; ++i)
21+
scanf ("%d", &a[i]);
22+
23+
top = 0;
24+
memset (f, -1, sizeof (f));
25+
for (i = 1; i <= n; ++i) {
26+
while (top > 0 && a[i] > a[st[top]]) {
27+
f[i] = max (f[i], (a[i] ^ a[st[top]]));
28+
top--;
29+
}
30+
st[++top] = i;
31+
}
32+
reverse (a + 1, a + n + 1);
33+
reverse (f + 1, f + n + 1);
34+
35+
36+
top = 0;
37+
for (i = 1; i <= n; ++i) {
38+
while (top > 0 && a[i] > a[st[top]]) {
39+
f[i] = max (f[i], (a[i] ^ a[st[top]]));
40+
top--;
41+
}
42+
st[++top] = i;
43+
}
44+
printf ("%d\n", *max_element (f + 1, f + n + 1));
45+
}
46+

Codeforces/283A_174.cpp

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <cstring>
4+
5+
using namespace std;
6+
7+
const int N = 200011;
8+
9+
long long L[N<<2], R[N<<2], s[N<<2], d[N<<2];
10+
11+
inline long long sz (int u) {return R[u] - L[u] + 1;}
12+
void push_down (int u) {
13+
d[u<<1] += d[u]; d[u<<1|1] += d[u];
14+
s[u<<1] += d[u] * sz(u<<1); s[u<<1|1] += d[u] * sz(u<<1|1);
15+
d[u] = 0;
16+
}
17+
18+
void maintain (int u) {
19+
if (L[u] == R[u]) d[u] = 0;
20+
else s[u] = s[u<<1] + s[u<<1|1];
21+
}
22+
23+
void build (int u, int x, int y) {
24+
L[u] = x; R[u] = y; s[u] = 0; d[u] = 0;
25+
if (x < y) {
26+
int mid = (x + y) / 2;
27+
build (u << 1, x, mid);
28+
build (u << 1 | 1, mid + 1, y);
29+
}
30+
}
31+
32+
void add (int u, int x, int y, int t) {
33+
if (x <= L[u] && y >= R[u]) {
34+
s[u] += sz(u) * t;
35+
d[u] += t;
36+
return;
37+
}
38+
push_down (u);
39+
int mid = (L[u] + R[u]) / 2;
40+
if (x <= mid) add (u<<1, x, y, t);
41+
if (y > mid) add (u<<1|1, x, y, t);
42+
maintain (u);
43+
}
44+
45+
void del (int u, int x) {
46+
if (L[u] == x && R[u] == x) {
47+
s[u] = d[u] = 0;
48+
return;
49+
}
50+
push_down (u);
51+
int mid = (L[u] + R[u]) / 2;
52+
if (x <= mid) del (u<<1, x);
53+
if (x > mid) del (u<<1|1, x);
54+
maintain (u);
55+
}
56+
int main () {
57+
int i, j, k, n, cnt = 1;
58+
build (1, 1, N);
59+
60+
for (scanf ("%d", &n); n; --n) {
61+
scanf ("%d", &k);
62+
if (k == 1) {
63+
scanf ("%d%d", &j, &i);
64+
add (1, 1, j, i);
65+
}
66+
else if (k == 2){
67+
cnt++;
68+
scanf ("%d", &i);
69+
add (1, cnt, cnt, i);
70+
}
71+
else
72+
del (1, cnt--);
73+
printf ("%.15lf\n", double (s[1]) / cnt);
74+
}
75+
return 0;
76+
}
77+

Codeforces/283A_174_2.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <cstring>
4+
5+
using namespace std;
6+
7+
const int N = 200011;
8+
9+
int a[N], n, cur;
10+
long long ans;
11+
12+
int main () {
13+
int i, j, k;
14+
a[cur = 1] = 0;
15+
for (scanf ("%d", &n); n; --n) {
16+
scanf ("%d", &k);
17+
if (k == 1) {
18+
scanf ("%d%d", &i, &j);
19+
if (cur == i)
20+
a[i] += j;
21+
else
22+
a[i] -= j;
23+
ans += j * i;
24+
}
25+
else if (k == 2) {
26+
scanf ("%d", &i);
27+
a[cur] = i - a[cur];
28+
a[++cur] = i; ans += i;
29+
}
30+
else {
31+
a[cur - 1] = a[cur] - a[cur - 1];
32+
ans -= a[cur--];
33+
}
34+
printf ("%.15lf\n", double (ans) / cur);
35+
}
36+
return 0;
37+
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)