Skip to content

Commit ef27779

Browse files
committed
regular update
1 parent ec4883c commit ef27779

File tree

8 files changed

+477
-0
lines changed

8 files changed

+477
-0
lines changed

Codeforces/150C_107.cpp

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
/*
2+
* 150C_107.cpp
3+
*
4+
* Created on: Jan 29, 2013
5+
* Author: shuo
6+
*/
7+
8+
#include <cstdio>
9+
#include <cstring>
10+
#include <algorithm>
11+
12+
using namespace std;
13+
14+
const int N = 150011;
15+
16+
int L[N<<2], R[N<<2];
17+
double lv[N<<2], rv[N<<2];
18+
double sum[N<<2], ma[N<<2];
19+
20+
typedef struct node {
21+
double ma, ml, mr;
22+
}qtype;
23+
24+
int cnt[N<<2];
25+
double a[N], pr[N];
26+
int v[N], n;
27+
int c;
28+
29+
void build (int u, int x, int y) {
30+
L[u] = x; R[u] = y;
31+
if (x == y) {
32+
sum[u] = lv[u] = rv[u] = a[x];
33+
ma[u] = max (a[x], .0);
34+
return;
35+
}
36+
int mid = (x + y) / 2;
37+
build (u << 1, x, mid);
38+
build (u << 1 | 1, mid + 1, y);
39+
sum[u] = sum[u<<1] + sum[u<<1|1];
40+
ma[u] = max (max (ma[u<<1], ma[u<<1|1]),lv[u<<1|1] + rv[u<<1]);
41+
lv[u] = max (lv[u<<1], sum[u<<1] + lv[u<<1|1]);
42+
rv[u] = max (rv[u<<1|1], sum[u<<1|1] + rv[u<<1]);
43+
}
44+
45+
46+
// maximum consecutive sub-block
47+
qtype query (int u, int x, int y) {
48+
if (x <= L[u] && y >= R[u]) {
49+
qtype ret = {ma[u], lv[u], rv[u]};
50+
return ret;
51+
}
52+
int mid = (L[u] + R[u]) / 2;
53+
qtype a = {-1e20, -1e20, -1e20}, b = {-1e20, -1e20, -1e20}, ret;
54+
if (x <= mid) a = query (u<<1, x, y);
55+
if (y > mid) b = query (u<<1|1, x, y);
56+
ret.ma = max(a.ma, b.ma);
57+
if (x <= mid && y > mid) {
58+
ret.ma = max (ret.ma, a.mr + b.ml);
59+
}
60+
ret.ml = a.ml;
61+
if (x <= L[u] && y > mid)
62+
ret.ml = max (ret.ml, sum[u<<1] + b.ml);
63+
ret.mr = b.mr;
64+
if (y >= R[u] && x <= mid)
65+
ret.mr = max (ret.mr, sum[u<<1|1] + a.mr);
66+
67+
return ret;
68+
}
69+
70+
int main () {
71+
int i, j, k, m;
72+
scanf ("%d%d%d", &n, &m, &c);
73+
for (i = 1, k = 0; i <= n; ++i) {
74+
scanf ("%d", &v[i]);
75+
j = v[i] - k;
76+
k= v[i]; v[i] = j;
77+
}
78+
79+
for (i = 2; i <= n; ++i) {
80+
scanf ("%lf", &pr[i]);
81+
pr[i] /= 100;
82+
}
83+
for (i = 2; i <= n; ++i)
84+
a[i] = .5 * v[i] - pr[i] * c;
85+
86+
build (1, 2, n);
87+
double ans = .0;
88+
for (; m; --m) {
89+
int ai, bi;
90+
scanf ("%d%d", &ai, &bi);
91+
qtype ret = query (1, ai + 1, bi);
92+
ans += ret.ma;
93+
}
94+
95+
printf ("%.15lf\n", ans);
96+
return 0;
97+
}
98+
99+
100+
101+
/*
102+
5 5 651
103+
0 438 1449 2349 3194
104+
67 6 98 38
105+
3 5
106+
1 3
107+
4 5
108+
1 3
109+
2 3
110+
1749.56
111+
*/

Codeforces/256E.cpp

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#include <iostream>
2+
#include <algorithm>
3+
#include <cstdio>
4+
#include <cstring>
5+
6+
7+
#define A(u, i, j) a[(u)][(i)][(j)]
8+
#define L(u) lt[(u)]
9+
#define R(u) rt[(u)]
10+
11+
using namespace std;
12+
13+
const int N = 77777 * 4;
14+
const int md = 777777777;
15+
16+
int lt[N], rt[N];
17+
long long a[N][4][4];
18+
int n, m;
19+
int val[N];
20+
bool g[4][4];
21+
22+
inline bool chk (int pos, int v) {
23+
return val[pos] == 0 || val[pos] == v;
24+
}
25+
26+
int calc () {
27+
int i, j;
28+
int ans = 0;
29+
int l = L(1), r = R(1);
30+
for (i = 1; i <= 3; ++i) {
31+
if (!chk (l, i)) continue;
32+
for (j = 1; j <= 3; ++j) {
33+
if (!chk(r, j) || (r==l+1 && !g[i][j])) continue;
34+
ans = (ans + A(1, i, j)) % md;
35+
}
36+
}
37+
return ans;
38+
}
39+
40+
void update (int u) {
41+
int l = L(u), r = R(u), ml = R(u*2), mr = L(u*2+1);
42+
memset (a[u], 0, sizeof (a[u]));
43+
for (int vml = 1; vml <= 3; ++vml) {
44+
if (!chk (ml, vml)) continue;
45+
for (int vmr = 1; vmr <= 3; ++vmr) {
46+
if (!chk (mr, vmr) || !g[vml][vmr]) continue;
47+
for (int vl = 1; vl <= 3; ++vl) {
48+
if (!chk (l, vl)) continue;
49+
for (int vr = 1; vr <= 3; ++vr) {
50+
if (!chk (r, vr)) continue;
51+
A(u, vl, vr) = (A(u, vl, vr) + A(u*2, vl, vml) * A(u*2+1, vmr, vr)) % md;
52+
}
53+
}
54+
}
55+
}
56+
}
57+
58+
void change (int u, int pos, int v) {
59+
int l = L(u), r = R(u);
60+
if (l == r) {
61+
val[pos] = v;
62+
return;
63+
}
64+
int mid = (l+r) / 2;
65+
if (pos <= mid) change (u << 1, pos, v);
66+
else change (u<<1 | 1, pos, v);
67+
update(u);
68+
}
69+
70+
void build (int u, int x, int y) {
71+
L(u) = x; R(u) = y;
72+
if (x == y) {
73+
for (int i = 1; i <= 3; ++i)
74+
for (int j = 1; j <= 3; ++j)
75+
A(u, i, j) = i==j ? 1 : 0;
76+
return;
77+
}
78+
int mid = (x + y) / 2;
79+
build (u << 1, x, mid);
80+
build (u << 1 | 1, mid + 1, y);
81+
update (u);
82+
}
83+
84+
int main () {
85+
int i, j, k;
86+
scanf ("%d%d", &n, &m);
87+
for (i = 1; i <= 3; ++i)
88+
for (j = 1; j <= 3; ++j) {
89+
scanf ("%d", &k);
90+
g[i][j] = k ? true : false;
91+
}
92+
build (1, 1, n);
93+
for (; m; --m) {
94+
scanf ("%d%d", &i, &k);
95+
change (1, i, k);
96+
printf ("%d\n", calc ());
97+
}
98+
return 0;
99+
}
100+

Codeforces/261A_160.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <iostream>
2+
#include <cstring>
3+
#include <algorithm>
4+
#include <cstdio>
5+
6+
using namespace std;
7+
8+
const int N = 100011;
9+
10+
11+
int a[N], n;
12+
int d[N], s[N];
13+
14+
int main () {
15+
int i, j, k;
16+
int cnt = N;
17+
scanf ("%d", &k);
18+
for (; k; --k) {
19+
scanf ("%d", &j);
20+
cnt = min (cnt, j);
21+
}
22+
scanf ("%d", &n);
23+
for (i = 1; i <= n; ++i)
24+
scanf ("%d", &a[i]);
25+
sort (a + 1, a + n + 1);
26+
27+
for (s[0] = 0, i = 1; i <= n; ++i)
28+
s[i] = s[i - 1] + a[i];
29+
30+
d[0] = 0;
31+
for (i = 1; i <= n; ++i) {
32+
d[i] = a[i] + d[i - 1];
33+
if (i >= cnt)
34+
d[i] = min (d[i], s[i] - s[i - cnt] + d[i - cnt]);
35+
if (i >= cnt + 1)
36+
d[i] = min (d[i], s[i] - s[i - cnt] + d[i - cnt - 1]);
37+
if (i >= cnt + 2)
38+
d[i] = min (d[i], s[i] - s[i - cnt] + d[i - cnt - 2]);
39+
}
40+
printf ("%d\n", d[n]);
41+
}

Codeforces/Div II/262A_160.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[n, k] = map (int, raw_input().split())
2+
a = map (int, raw_input().split());
3+
ans = 0;
4+
for i in a:
5+
cnt = 0;
6+
while i != 0:
7+
j = i % 10;
8+
if j == 4 or j == 7:
9+
cnt += 1
10+
i = i // 10;
11+
if cnt <= k:
12+
ans += 1;
13+
print ans
14+

Codeforces/Div II/262B_160.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[n, k] = map (int, raw_input().split())
2+
a = map (int, raw_input().split());
3+
4+
b = [-x for x in a if x < 0];
5+
nn = len (b)
6+
if k >= nn:
7+
ans = sum(a) + 2 * sum(b);
8+
c = [abs(x) for x in a];
9+
c.sort ();
10+
if (k-nn) % 2 == 1:
11+
ans -= 2 * c[0];
12+
else:
13+
ans = sum (a);
14+
for i in xrange (k):
15+
ans += -2 * a[i];
16+
print ans;
17+
18+

SPOJ/1043_GSS1.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/*
2+
* 1043_GSS1.cpp
3+
*
4+
* Created on: Jan 29, 2013
5+
* Author: shuo
6+
*/
7+
8+
9+
#include <cstdio>
10+
#include <cstring>
11+
#include <algorithm>
12+
13+
using namespace std;
14+
15+
const int N = 50011;
16+
17+
int L[N<<2], R[N<<2];
18+
int lv[N<<2], rv[N<<2];
19+
int sum[N<<2], ma[N<<2];
20+
21+
typedef struct node {
22+
int ma, ml, mr;
23+
}qtype;
24+
25+
int a[N], n;
26+
27+
void build (int u, int x, int y) {
28+
L[u] = x; R[u] = y;
29+
if (x == y) {
30+
sum[u] = lv[u] = rv[u] = a[x];
31+
ma[u] = a[x];
32+
return;
33+
}
34+
int mid = (x + y) / 2;
35+
build (u << 1, x, mid);
36+
build (u << 1 | 1, mid + 1, y);
37+
sum[u] = sum[u<<1] + sum[u<<1|1];
38+
ma[u] = max (max (ma[u<<1], ma[u<<1|1]),lv[u<<1|1] + rv[u<<1]);
39+
lv[u] = max (lv[u<<1], sum[u<<1] + lv[u<<1|1]);
40+
rv[u] = max (rv[u<<1|1], sum[u<<1|1] + rv[u<<1]);
41+
}
42+
43+
44+
// maximum consecutive sub-block
45+
qtype query (int u, int x, int y) {
46+
if (x <= L[u] && y >= R[u]) {
47+
qtype ret = {ma[u], lv[u], rv[u]};
48+
return ret;
49+
}
50+
int mid = (L[u] + R[u]) / 2;
51+
qtype a = {-1e9, -1e9, -1e9}, b = {-1e9, -1e9, -1e9}, ret;
52+
if (x <= mid) a = query (u<<1, x, y);
53+
if (y > mid) b = query (u<<1|1, x, y);
54+
ret.ma = max(a.ma, b.ma);
55+
if (x <= mid && y > mid) {
56+
ret.ma = max (ret.ma, a.mr + b.ml);
57+
}
58+
ret.ml = a.ml;
59+
if (x <= L[u] && y > mid)
60+
ret.ml = max (ret.ml, sum[u<<1] + b.ml);
61+
ret.mr = b.mr;
62+
if (y >= R[u] && x <= mid)
63+
ret.mr = max (ret.mr, sum[u<<1|1] + a.mr);
64+
65+
return ret;
66+
}
67+
68+
int main () {
69+
int i, m;
70+
scanf ("%d", &n);
71+
for (i = 1; i <= n; ++i) scanf ("%d", &a[i]);
72+
73+
build (1, 1, n);
74+
75+
for (scanf ("%d", &m); m; --m) {
76+
int ai, bi;
77+
scanf ("%d%d", &ai, &bi);
78+
printf ("%d\n", query (1, ai, bi).ma);
79+
}
80+
81+
return 0;
82+
}
83+
84+

0 commit comments

Comments
 (0)