Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.61 KB | None | 0 0
  1. #include <iostream>
  2. //#include <set>
  3. #include <unordered_set>
  4. #include <stdio.h>
  5.  
  6. void WordFind(std::string &s) {
  7.     for (auto &c : s)
  8.         if (c+1 >'z')
  9.             c='a';
  10.         else
  11.             c+=1;
  12. }
  13.  
  14. int main() {
  15. //    std::set<std::string> Decrypt{};
  16.     std::unordered_set<std::string> Decrypt{};
  17.     int Wordlen=1000000;
  18.     int N = 0;
  19.     char *Word = new char[Wordlen];
  20.  
  21.     while (scanf("%s", Word) ) {
  22.         if (isdigit(Word[0])) {
  23.             N = atoi(Word);
  24.             break;
  25.         }
  26.         Decrypt.insert(std::string(Word));
  27.     }
  28.  
  29.     for (int j = 0; j < N; j++) {
  30.         scanf("%s", Word);
  31.         std::string s{Word};
  32.         for (int i = 0; i < 'z'-'a'+1; i++) {
  33.             WordFind(s);
  34.             if (Decrypt.count(s) != 0)
  35.                 printf("%s\n", s.c_str());
  36.         }
  37.     }
  38.  
  39.     delete Word;
  40.     return 0;
  41. }
  42.  
  43. -----------------------------------2----------------------------
  44. Amount = int(input())
  45. Boxes=[]
  46. Counter=0
  47. for i in range(Amount):
  48.     Box=input().split()
  49.     Boxes.append((lambda x,y: (int(x),int(y)) if int(x)>int(y) else (int(y),int(x)))(*Box))
  50. Boxes=sorted(Boxes,key=lambda x:(x[0],-x[1]),reverse=True)
  51. CurMax=0
  52. for x,y in Boxes:
  53.     if y>=CurMax:
  54.         Counter+=1
  55.         CurMax=y
  56. print(Counter)
  57.  
  58. --------------------------------3--------------------------
  59. from math import sqrt
  60.  
  61. class Graph:
  62.     def __init__(self, Cf):
  63.         self.a, self.b, self.c = Cf
  64.  
  65.     def getRes(self,pt):
  66.         return self.a*pt**2 + self.b*pt + self.c
  67.  
  68.     def getInt(self, Lft, Rgt):
  69.         return self.a * (Rgt**3 - Lft ** 3) / 3 + self.b * (Rgt**2 - Lft**2) / 2 + self.c * (Rgt - Lft)
  70.  
  71.     def __sub__(self, other):
  72.         return Graph((self.a - other.a, self.b - other.b, self.c - other.c))
  73.  
  74.     def __str__(self):
  75.         return str(self.x) + " * x^2 + " + str(self.y) + " * x +" + str(self.z)
  76.  
  77.     def GetPoints(self):
  78.         Discr = self.b ** 2 - 4 * self.a * self.c
  79.         if self.a==0:
  80.             if self.b==0:
  81.                 return []
  82.             else:
  83.                 return [-self.c/self.b]
  84.         if Discr > 0:
  85.             x1, x2 = (-self.b - sqrt(Discr)) / (2 * self.a), (-self.b + sqrt(Discr)) / (2 * self.a)
  86.             return [x1, x2] if x1 < x2 else [x2, x1]
  87.         elif Discr == 0:
  88.             return [self.b / 2 * self.a]
  89.         else:
  90.             return []
  91.  
  92. def TestPoint(Funks,Int):
  93.     return (Funks[0],Funks[1]) if Funks[0].getRes((Int[1]+Int[0])/2)>= Funks[1].getRes((Int[1]+Int[0])/2) else (Funks[1],Funks[0])
  94.  
  95.  
  96. def NewInt(Points,Min,Max):
  97.     Res=[Min,Max]
  98.     for elem in Points:
  99.         if elem>Res[0] and elem < Res[-1]:
  100.             Res.insert(-1,elem)
  101.     return Res
  102.  
  103.  
  104.  
  105. # print(NewInt([],1,4))
  106. N, M = map(int, input().split())
  107. ResSum,PosN,PosM=0,0,0
  108. Tmp = []
  109. NPoints = list(map(float, input().split()))
  110. NFuncks = []
  111. Sum=0
  112. for i in range(N):
  113.     NFuncks.append(Graph(tuple(map(int, input().split()))))
  114. # NFuncs.append({i for i in range Graph(tuple(map(int, input().split())))})
  115. MPoints = list(map(float, input().split()))
  116. MFuncks = []
  117. for i in range(M):
  118.     MFuncks.append(Graph(tuple(map(int, input().split()))))
  119.  
  120. while PosN!=N and PosM!=M:
  121.     Min,Max=max(NPoints[PosN],MPoints[PosM]),min(NPoints[PosN+1],MPoints[PosM+1])
  122.     FunN,FunM=NFuncks[PosN],MFuncks[PosM]
  123.     Int=NewInt((FunM-FunN).GetPoints(),Min,Max)
  124.     for pos in range(len(Int)-1):
  125.         # Funks=TestPoint([FunN,FunM],[Int[pos],Int[pos+1]])
  126.         Sum+=abs((FunN-FunM).getInt(Int[pos],Int[pos+1]))
  127.     if Max==MPoints[PosM+1]:
  128.         PosM+=1
  129.         if Max==NPoints[PosN+1]:
  130.             PosN+=1
  131.     else:
  132.          PosN+=1
  133. print("{:.8}".format(Sum))
  134.  
  135. --------------------------------------5----------------------------------
  136. #include <random>
  137. #include <set>
  138. #include <map>
  139.  
  140. class segmtree {
  141.     int n, *t;
  142.  
  143.     void buikd_tree(const std::vector<int> &from, int v, int tl, int tr) {
  144.         if (tl == tr)
  145.             t[v] = from[tl];
  146.         else {
  147.             int tm = (tl + tr) / 2;
  148.             buikd_tree(from, v * 2, tl, tm);
  149.             buikd_tree(from, v * 2 + 1, tm + 1, tr);
  150.             t[v] = t[v * 2] + t[v * 2 + 1];
  151.         }
  152.     }
  153.  
  154.     int rec_sum(int v, int topl, int topr, int left, int right {
  155.         if (left > right)
  156.             return 0;
  157.         if (left == topl && right == topr)
  158.             return t[v];
  159.         int tm = (topl + topr) / 2;
  160.         return rec_sum(v * 2, topl, tm, left, std::min(right, tm)) + rec_sum(v * 2 + 1, tm + 1, topr, std::max(left, tm + 1), right);
  161.     }
  162.  
  163.     void rec_update(int v, int tl, int tr, int pos, int new_val) {
  164.         if (tl == tr)
  165.             t[v] = new_val;
  166.         else {
  167.             int tm = (tl + tr) / 2;
  168.             if (pos <= tm)
  169.                 rec_update(v * 2, tl, tm, pos, new_val);
  170.             else
  171.                 rec_update(v * 2 + 1, tm + 1, tr, pos, new_val);
  172.             t[v] = t[v * 2] + t[v * 2 + 1];
  173.         }
  174.     }
  175.  
  176.  
  177. public:
  178.     segmtree(const std::vector<int> &a) {
  179.         n = a.size();
  180.         t = new int[4 * n];
  181.         buikd_tree(a, 1, 0, n - 1);
  182.     }
  183.  
  184.     int sum(int l, int r) {
  185.         return rec_sum(1, 0, n - 1, l, r);
  186.     }
  187.  
  188.     void update(int pos, int val) {
  189.         rec_update(1, 0, n - 1, pos, val);
  190.     }
  191. };
  192.  
  193. class tree {
  194. public:
  195.     int y, value, tree_size;
  196.     tree *left, *right;
  197.  
  198.     tree(int y = 0, int value = 0, tree *l = nullptr, tree *r = nullptr, int size = 1) : y(y), value(value),
  199.                                                                                          left(l),
  200.                                                                                          right(r), tree_size(size) {}
  201. };
  202.  
  203.  
  204. tree *pre_alocate_trees = nullptr;
  205. int new_tree_ind = 0;
  206.  
  207. tree *get_new_tree(int y = 0, int value = 0, tree *l = nullptr, tree *r = nullptr, int size = 1) {
  208.     tree *new_node = &pre_alocate_trees[new_tree_ind];
  209.     new_node->y = y;
  210.     new_node->value = value;
  211.     new_node->left = l;
  212.     new_node->right = r;
  213.     new_node->tree_size = size;
  214.     new_tree_ind++;
  215.     return new_node;
  216. }
  217.  
  218. int size_of_tree(tree *t) {
  219.     if (t)
  220.         return t->tree_size;
  221.     else
  222.         return 0;
  223. }
  224.  
  225. void update_size(tree *t) {
  226.     t->tree_size = size_of_tree(t->left) + size_of_tree(t->right) + 1;
  227. }
  228.  
  229. void split_tree(tree *t, int pos, tree *&l, tree *&r) {
  230.     if (t == nullptr) {
  231.         l = r = nullptr;
  232.         return;
  233.     }
  234.     if (size_of_tree(t->left) < pos) {
  235.         split_tree(t->right, pos - size_of_tree(t->left) - 1, t->right, r);
  236.         l = t;
  237.     } else {
  238.         split_tree(t->left, pos, l, t->left);
  239.         r = t;
  240.     }
  241.     update_size(t);
  242. }
  243.  
  244. tree *merge_trees(tree *l, tree *r) {
  245.     if (l == nullptr) { return r; }
  246.     if (r == nullptr) { return l; }
  247.     if (l->y > r->y) {
  248.         l->right = merge_trees(l->right, r);
  249.         update_size(l);
  250.         return l;
  251.     } else {
  252.         r->left = merge_trees(l, r->left);
  253.         update_size(r);
  254.         return r;
  255.     }
  256. }
  257.  
  258. tree *erase(tree *t, int pos, int &val) {
  259.     tree *l, *m, *r;
  260.     split_tree(t, pos, l, r);
  261.     split_tree(r, 1, m, r);
  262.     val = m->value;
  263.     return merge_trees(l, r);
  264. }
  265.  
  266. tree *insert(tree *t, int value, int pos) {
  267.     tree *l, *r;
  268.     split_tree(t, pos, l, r);
  269.     tree *m = get_new_tree(std::rand(), value);
  270.     return merge_trees(merge_trees(l, m), r);
  271. }
  272.  
  273. void delete_nodes() {
  274.     delete[] pre_alocate_trees;
  275. }
  276.  
  277.  
  278.  
  279.  
  280. int main() {
  281.     int n, m, type;
  282.     scanf("%d%d%d", &n, &m, &type);
  283. //    std::cin >> n >> m >> type;
  284.     if (type == 1) {
  285.         std::vector<int> x{};
  286.         std::vector<int> k_val{};
  287.         std::map<int, int> pos{};
  288.  
  289.         for (int i = 0; i < m; i++) {
  290.             x.push_back(m - i);
  291.             k_val.push_back(1);
  292.             pos[m - i] = i;
  293.         }
  294.  
  295.         int in;
  296.         for (int i = 0; i < n; i++) {
  297.             scanf("%d", &in);
  298.             x.push_back(in);
  299.             k_val.push_back(0);
  300.         }
  301.  
  302.         segmtree tree(k_val);
  303.         for (int i = m; i < n + m; i++) {
  304.             printf("%d ", tree.sum(pos[x[i]], i));
  305.             tree.update(pos[x[i]], 0);
  306.             tree.update(i, 1);
  307.             pos[x[i]] = i;
  308.         }
  309.     }
  310.     else if (type == 2) {
  311.         pre_alocate_trees = new tree[1000006];
  312.         tree *perm = {};
  313.         for (int i = 0; i < m; i++)
  314.             perm = insert(perm, i + 1, i);
  315.  
  316.         for (int i = 0; i < n; i++) {
  317.             int val;
  318.             scanf("%d", &val);
  319.             int new_val;
  320.             perm = erase(perm, val - 1, new_val);
  321.             printf("%d ", new_val);
  322.             perm = insert(perm, new_val, 0);
  323.         }
  324.         delete_nodes();
  325.     }
  326.     return 0;
  327. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement