Advertisement
ice_tea

Untitled

Aug 23rd, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.03 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define eps 1e-7
  4. #define inf 1e9
  5. #define linf 1e18
  6. #define pb push_back
  7. #define mod 1e9 + 7
  8. #define mp make_pair
  9. #define ld long double
  10. #define pi 3.141592653589793238462643
  11. using namespace std;
  12.  
  13. ll null = 0;
  14.  
  15. struct segment;
  16. struct line;
  17. struct point;
  18. struct vec;
  19. struct ray;
  20.  
  21. struct point{
  22.     ld x, y;
  23.     point(){}
  24.     point(ld x1, ld y1){
  25.         x = x1;
  26.         y = y1;
  27.     }
  28.     ld dist_to_point(point p){
  29.         return sqrt((p.x - x) * (p.x - x) + (p.y - y) * (p.y - y));
  30.     }
  31.     bool operator < (point p){
  32.         return (x < p.x) || ((x == p.x) && (y < p.y));
  33.     }
  34. };
  35.  
  36. struct vec{
  37.     ld x, y;
  38.     vec (ld x1, ld y1){
  39.         x = x1;
  40.         y = y1;
  41.     }
  42.     vec (point a, point b){
  43.         x = b.x - a.x;
  44.         y = b.y - a.y;
  45.     }
  46.     vec normal(){
  47.         vec ans;
  48.         ans.x = y;
  49.         ans.y = -x;
  50.         return ans;
  51.     }
  52.     vec opposite(){
  53.         vec ans;
  54.         ans.x = -x;
  55.         ans.y = -y;
  56.         return ans;
  57.     }
  58.     vec sum(vec b){
  59.         vec ans;
  60.         ans.x = x + b.x;
  61.         ans.y = y + b.y;
  62.         return ans;
  63.     }
  64.     ld cross_product(vec v){
  65.         return x * v.y - v.x * y;
  66.     }
  67.     ld dot_product(vec v){
  68.         return x * v.x + y * v.y;
  69.     }
  70.     vec resize(ld size){
  71.         vec ans;
  72.         ans.x = (x * size) / len();
  73.         ans.y = (y * size) / len();
  74.         return ans;
  75.     }
  76.     vec(){}
  77.     ld len(){
  78.         return sqrt(x * x + y * y);
  79.     }
  80. };
  81.  
  82.  
  83. struct line{
  84.     ld a, b, c;
  85.     line (point a1, point b1){
  86.         a = a1.y - b1.y;
  87.         b = b1.x - a1.x;
  88.         c = -a1.x * a - a1.y * b;
  89.     }
  90.     line (ld a1, ld b1, ld c1){
  91.         a = a1;
  92.         b = b1;
  93.         c = c1;
  94.     }
  95.     line(){}
  96.     vec normal_vec(){
  97.         vec ans;
  98.         ans.x = a;
  99.         ans.y = b;
  100.         return ans;
  101.     }
  102.     line normal_line(point p){
  103.         line ans;
  104.         ans.a = -b;
  105.         ans.b = a;
  106.         ans.c = -ans.a * p.x - ans.b * p.y;
  107.         return ans;
  108.     }
  109.     ld get_x(ld y1){
  110.         if (a == 0) return 0;
  111.         return (-c - b * y1) / a;
  112.     }
  113.     ld get_y(ld x1){
  114.         if (b == 0) return 0;
  115.         return (-c - a * x1) / b;
  116.     }
  117.     point intersection(line l){
  118.         point ans;
  119.         ans.x = (-c * l.b + l.c * b) / (a * l.b - l.a * b);
  120.         ans.y = (-a * l.c + l.a * c) / (a * l.b - l.a * b);
  121.         return ans;
  122.     }
  123.     bool parallels(line l){
  124.         return a * l.b - l.a * b == 0;
  125.     }
  126.     ld dist_to_point(point p){
  127.         return abs((a * p.x + b * p.y + c) / (sqrt(a * a + b * b)));
  128.     }
  129.     ll is_inside(point p){
  130.         ld k = a * p.x + b * p.y + c;
  131.         if (k < 0) return -1;
  132.         else if (k == 0) return 0;
  133.         return 1;
  134.     }
  135. };
  136.  
  137. struct segment{
  138.     point a, b;
  139.     segment(){}
  140.     segment(point a1, point b1){
  141.         a = a1;
  142.         b = b1;
  143.     }
  144.     ld len(){
  145.         return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
  146.     }
  147.     bool is_inside(point p){
  148.         line l(a, b);
  149.         if (l.is_inside(p) != 0) return false;
  150.         vec v(p, a), v1(p, b);
  151.         if (v.dot_product(v1) > 0) return false;
  152.         return true;
  153.     }
  154.     long double dist_to_point(point p){
  155.         vec v(a, p), v1(a, b), v2(b, p), v3(b, a);
  156.         if (v.dot_product(v1) < 0) return p.dist_to_point(a);
  157.         if (v2.dot_product(v3) < 0) return p.dist_to_point(b);
  158.         line l(a, b);
  159.         return l.dist_to_point(p);
  160.     }
  161.     point get_center(){
  162.         point ans;
  163.         ans.x = (a.x + b.x) / 2;
  164.         ans.y = (a.y + b.y) / 2;
  165.         return ans;
  166.     }
  167. };
  168.  
  169. struct ray{
  170.     point a, b;
  171.     ray(point p, point p1){
  172.         a = p;
  173.         b = p1;
  174.     }
  175.     ray(){}
  176.     ld dist_to_point(point p){
  177.         vec v(a, p), v1(a, b);
  178.         if (v.dot_product(v1) < 0) return a.dist_to_point(p);
  179.         line l(a, b);
  180.         return l.dist_to_point(p);
  181.     }
  182.     bool is_inside(point p){
  183.         line l(a, b);
  184.         if (l.is_inside(p) != 0) return false;
  185.         vec v(a, p), v1(a, b);
  186.         if (v.dot_product(v1) < 0) return false;
  187.         return true;
  188.     }
  189. };
  190.  
  191. struct angle{
  192.     point a, b, c;
  193.     angle(){};
  194.     angle (point a1, point b1, point c1){
  195.         a = a1;
  196.         b = b1;
  197.         c = c1;
  198.     }
  199.     ld get_angle(){
  200.         vec v(b, a), v1(b, c);
  201.         return acos(v.dot_product(v1) / (v.len() * v1.len()));
  202.     }
  203.     ld get_grad_angle(){
  204.         vec v(b, a), v1(b, c);
  205.         return 180 * acos(v.dot_product(v1) / (v.len() * v1.len())) / pi;
  206.     }
  207. };
  208.  
  209. struct polygon{
  210.     ll n;
  211.     vector <point> points;
  212.     ld get_area(){
  213.         point a(0, 0);
  214.         vec v(a, points[0]);
  215.         ld ans = 0;
  216.         for (ll i = 1; i < n; ++i){
  217.             vec v1(a, points[i]);
  218.             ans = ans + v.cross_product(v1);
  219.             v = v1;
  220.         }
  221.         vec v2(a, points[0]);
  222.         vec v1(a, points[n - 1]);
  223.         return abs(ans + v1.cross_product(v2)) / 2;
  224.     }
  225. };
  226.  
  227. struct triangle{
  228.     point a, b, c;
  229.     triangle(){}
  230.     triangle(point a1, point b1, point c1){
  231.         a = a1;
  232.         b = b1;
  233.         c = c1;
  234.     }
  235.     ld get_area(){
  236.         point d(0, 0);
  237.         vec v(a, d), v1(b, d), v2(c, d);
  238.         return (v.cross_product(v1) + v1.cross_product(v2) + v2.cross_product(v)) / 2;
  239.     }
  240.     point get_center(){
  241.         segment s(a, b), s1(a, c);
  242.         point p = s.get_center(), p1 = s1.get_center();
  243.         line l(a, b), l1(a, c), l2(b, c);
  244.         l = l.normal_line(p);
  245.         l1 = l1.normal_line(p1);
  246.         return l.intersection(l1);
  247.     }
  248.     ld get_R(){
  249.         triangle t(a, b, c);
  250.         point p = t.get_center();
  251.         return p.dist_to_point(a);
  252.     }
  253. };
  254.  
  255. ll power(ll a, ll b){
  256.     if (b == 0) return 1;
  257.     else if (b == 1) return a;
  258.     else {
  259.         ll k = power(a, b / 2);
  260.         return k * k * power(a, b % 2);
  261.     }
  262. }
  263.  
  264. ll power_mod(ll a, ll b, ll MOD){
  265.     if (b == 0) return 1;
  266.     else if (b == 1) return a % MOD;
  267.     else{
  268.         ll k = power_mod(a, b / 2, MOD);
  269.         return ((k * k) % MOD * power_mod(a, b % 2, MOD)) % MOD;
  270.     }
  271. }
  272.  
  273. ll sum_mod(ll a, ll b, ll MOD){
  274.     return (a + b) % MOD;
  275. }
  276.  
  277. ll mul_mod(ll a, ll b, ll MOD){
  278.     return (a * b) % MOD;
  279. }
  280.  
  281. ll ord(char a){
  282.     return a;
  283. }
  284.  
  285. char chr(ll a){
  286.     return a;
  287. }
  288.  
  289. ll strtoint(string s){
  290.     ll ans = 0;
  291.     for (ll i = 0; i < s.size(); ++i){
  292.         ans *= 10;
  293.         ans += ord(s[i]) - 48;
  294.     }
  295.     return ans;
  296. }
  297.  
  298. string rev_string(string s){
  299.     string ans = "";
  300.     for (ll i = s.size(); i >= 0; --i){
  301.         ans += s[i];
  302.     }
  303.     return ans;
  304. }
  305.  
  306. string inttostr(ll a){
  307.     string ans = "", ans1 = "";
  308.     while (a > 0){
  309.         ans += chr(a % 10 + 48);
  310.         a /= 10;
  311.     }
  312.     for (ll i = ans.size() - 1; i >= 0; --i){
  313.         ans1 += ans[i];
  314.     }
  315.     return ans1;
  316. }
  317.  
  318. ll gcd(ll a, ll b){
  319.     if (a == 0) return b;
  320.     return gcd(b % a, a);
  321. }
  322.  
  323. ll nok(ll a, ll b){
  324.     return a * b / gcd(a, b);
  325. }
  326.  
  327.  
  328.  
  329. /*
  330. _________________________________________________________________________________________________________________________________________________
  331. start programm
  332. _________________________________________________________________________________________________________________________________________________
  333. */
  334.  
  335. #define len 128
  336.  
  337. struct new_struct{
  338.     ll num, x, y, k;
  339.     bool operator< ( const new_struct& a)const{
  340.         return num > a.num;
  341.     }
  342. };
  343.  
  344. struct new_struct1{
  345.     ll x, y, k;
  346. };
  347.  
  348. ll a[400000], b[400000];
  349. vector <new_struct1> stash;
  350. vector <new_struct> arr[400000];
  351. set <new_struct> mas;
  352. ll n;
  353.  
  354. void remake(){
  355.     for (ll i = 0; i < stash.size(); ++i){
  356.         new_struct a;
  357.         a.num = i;
  358.         a.x = stash[i].x;
  359.         a.y = stash[i].y;
  360.         a.k = stash[i].k;
  361.         arr[stash[i].y].pb(a);
  362.     }
  363.     for (ll i = 0; i < n; ++i){
  364.         for (ll j = 0; j < arr[i].size(); ++j){
  365.             mas.insert(arr[i][j]);
  366.         }
  367.         if (mas.size() == 0) continue;
  368.         set <new_struct> :: iterator it = mas.begin();
  369.         while ((mas.size() > 0) && (it->y + it->k <= i)){
  370.             mas.erase(it);
  371.             if (mas.size() == 0) break;
  372.             it = mas.begin();
  373.         }
  374.         if (mas.size() == 0) continue;
  375.         b[i] = a[i - it->y + it->x];
  376.     }
  377.     mas.clear();
  378.     stash.clear();
  379. }
  380.  
  381. int main(){
  382.     ios_base::sync_with_stdio(0);
  383.     cin.tie(0);
  384.     cout.tie(0);
  385.     srand(time(0));
  386.     ll m;
  387.    
  388.     cin>>n>>m;
  389.     for (ll i = 0; i < n; ++i){
  390.         cin>>a[i];
  391.     }
  392.     for (ll i = 0; i < n; ++i){
  393.         cin>>b[i];
  394.     }
  395.    
  396.     for (ll i = 0; i < m; ++i){
  397.         ll t;
  398.         cin>>t;
  399.         if (t == 1){
  400.             ll x, y, k;
  401.             cin>>x>>y>>k;
  402.             --x;
  403.             --y;
  404.             new_struct1 a;
  405.             a.x = x;
  406.             a.y = y;
  407.             a.k = k;
  408.             stash.pb(a);
  409.             if (stash.size() > len){
  410.                 remake();
  411.             }
  412.         }
  413.         else{
  414.             ll x;
  415.             cin>>x;
  416.             --x;
  417.             if (stash.size() == 0){
  418.                 cout<<b[x]<<endl;
  419.                 continue;
  420.             }
  421.             ll j;
  422.             for (j = stash.size() - 1; j >= 0; --j){
  423.                 if ((stash[j].y + stash[j].k > x) && (stash[j].y <= x)){
  424.                     cout<<a[x - stash[j].y + stash[j].x]/*<<" &"*/<<endl;
  425.                     break;
  426.                 }
  427.             }
  428.             if (j == -1) cout<<b[x]<<endl;
  429.         }
  430.     }
  431. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement