Все задачи на 5.10.17 13:00

This commit is contained in:
2017-10-05 13:08:02 +03:00
parent 93746b05d7
commit ca2ca71f63
120 changed files with 2343 additions and 0 deletions

BIN
uts/uts_2k17_march_py/DER/A Executable file

Binary file not shown.

View File

@@ -0,0 +1,75 @@
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define MAXN 100007
int a[MAXN], tree[4 * MAXN], upd[4 * MAXN], n;
void build_tree(int v, int tl, int tr)
{
if(tl == tr) tree[v] = a[tl];
else
{
int tm = (tl + tr) >> 1;
build_tree(v + v, tl, tm);
build_tree(v + v + 1, tm + 1, tr);
tree[v] = tree[v + v] + tree[v + v + 1];
}
}
int query_tree(int v, int tl, int tr, int l, int r)
{
if(l > r) return 0;
if(upd[v] != -1) return upd[v] * (r - l + 1);
if(l == tl && r == tr) return tree[v];
int tm = (tl + tr) >> 1;
return query_tree(v + v, tl, tm, l, min(r, tm)) + query_tree(v + v + 1, tm + 1, tr, max(l, tm + 1), r);
}
void update_tree(int v, int tl, int tr, int l, int r, int color)
{
if(l > r) return;
if(l == tl && tr == r)
{
upd[v] = color;
tree[v] = color * (r - l + 1);
}
else
{
upd[v] = -1;
int tm = (tl + tr) >> 1;
update_tree(v + v, tl, tm, l, min(r, tm), color);
update_tree(v + v + 1, tm + 1, tr, max(l, tm + 1), r, color);
tree[v] = tree[v + v] + tree[v + v + 1];
}
}
int main()
{
ifstream cin("sum.in");
ofstream cout("sum.out");
int k;
cin >> n >> k;
for(int i = 0; i < 4 * MAXN; i++) upd[i] = -1; //Изначально все отрезки(вершины) не обновлены
build_tree(1, 0, n-1);
int q, x, l, r;
char type;
scanf("%d", &q);
for(int i = 0; i < k; i++)
{
cin >> type;
cin >> l;
cin >> r;
if(type == 'Q')
{
printf("%d\n", query_tree(1, 0, n - 1, l, r));
}
else if(type == 'A')
{
update_tree(1, 0, n - 1, l, l, r);
}
}
return 0;
}

View File

@@ -0,0 +1,42 @@
import sys
problem_name = str('sum')
sys.stdin = open(problem_name + ".in", "r")
#sys.stdout = open(problem_name+".out", "w")
def deld(a):
left = len(a) // 2
right = len(a) // 2 + len(a) % 2
print(0, ' ', left, ' ', right, ' ', left+right)
b = [a[i] for i in range(left)]
c = [a[i] for i in range(left, left+right)]
return b, c
def build(a, fab):
if len(a) <= 1:
return
left, right = deld(a)
fab.append([0])
fab.append([0])
build(left, fab[0])
build(right, fab[1])
def build_linkers(a, fab):
n, k = list(map(int, input().split()))
mas = [[0] for i in range(n)]
fab = []
build(mas, fab)
query = []
for i in range(k-1):
s = input().split()
s[1] = int(s[1])-1
s[2] = int(s[2])
if s[0] == 'A':
mas[s[1]] = [s[2]]
else:
query.append(s)
print(query)
print(mas)
print(fab)

View File

@@ -0,0 +1,10 @@
5 9
A 2 2
A 3 1
A 4 2
Q 1 1
Q 2 2
Q 3 3
Q 4 4
Q 5 5
Q 1 5