Submission #328755

#TimeUsernameProblemLanguageResultExecution timeMemory
328755gmyuBubble Sort 2 (JOI18_bubblesort2)C++14
0 / 100
358 ms327660 KiB
/* ID: USACO_template LANG: C++ PROG: USACO */ #include <iostream> //cin , cout #include <fstream> //fin, fout #include <stdio.h> // scanf , pringf #include <cstdio> #include <algorithm> // sort , stuff #include <stack> // stacks #include <queue> // queues #include <map> #include <string> #include <set> using namespace std; typedef pair<int, int> pii; typedef vector<int> vi; /// adjlist without weight typedef vector<pii> vii; /// adjlist with weight typedef vector<pair<int,pii>> vpip; /// edge with weight typedef long long ll; #define mp make_pair #define fst first #define snd second #define pb push_back #define trav(u, adj_v) for (auto& u: adj_v) const int MOD = 1e9+7; // 998244353; const int MX = 2e5+5; // const ll INF = 1e18; // #define MAXV 500007 #define MAXE 100007 const int xdir[4] = {1,0,-1,0}, ydir[4] = {0,1,0,-1}; /// 4 directions struct NODE { int x, y; int val; int visited; }; struct EDGE { int from, to; ll weight; bool operator<(EDGE other) const { return weight < other.weight; } }; /// code from USACO examples void setIO(string name) { ios_base::sync_with_stdio(0); cin.tie(0); freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout); } bool debug = false, submit = true; /// ------ Segment Treee -------- int Nseg[2]; struct SEGNODE { multiset<int> s; }; SEGNODE seg[6*MAXV]; /// max 2e5 unique y, which needs 2^19 for Nseg void buildSeg(int v = 1, int l = Nseg[0], int r = Nseg[1]) { if(l == r) { // leaf seg[v].s.clear(); return; } int mid = (l + r) / 2; buildSeg(2*v, l, mid); buildSeg(2*v+1, mid+1, r); seg[v].s.clear(); } ll querySeg(int qle, int qri, int lim, int v = 1, int l = Nseg[0], int r = Nseg[1]) { if(r < qle || l > qri) return 0LL; if(qle <= l && r <= qri) { multiset<int>::iterator itup = seg[v].s.upper_bound(lim); return distance(itup, seg[v].s.end()); } int mid = (l + r) / 2; return querySeg(qle, qri, lim, 2*v, l, mid) + querySeg(qle, qri, lim, 2*v+1, mid+1, r); } void updateSeg(int vtx, int val, int v = 1, int l = Nseg[0], int r = Nseg[1]){ if(l == r) { // leaf seg[v].s.insert(val); return; } int mid = (l + r) / 2; (vtx <= mid) ? updateSeg(vtx, val, 2*v, l, mid) : updateSeg(vtx, val, 2*v+1, mid+1, r); seg[v].s.insert(val); } void replaceSeg(int vtx, int val0, int val1, int v = 1, int l = Nseg[0], int r = Nseg[1]){ if(l == r) { // leaf seg[v].s.erase(val0); seg[v].s.insert(val1); return; } int mid = (l + r) / 2; (vtx <= mid) ? replaceSeg(vtx, val0, val1, 2*v, l, mid) : replaceSeg(vtx, val0, val1, 2*v+1, mid+1, r); seg[v].s.erase(val0); seg[v].s.insert(val1); } vector<int> countScans( vector<int> A, vector<int> X, vector<int> V) { debug = true; submit = false; if(submit) setIO("testName"); int i, j, k; vector<ll> ans; ll total = 0; Nseg[0] = 0; Nseg[1] = A.size() - 1; buildSeg(); for(i=0; i<A.size();i++) { updateSeg(i, A[i]); } for(i=0; i<A.size();i++) { ans[i] = (i>=1) ? querySeg(0, i-1, A[i]) : 0; total += ans[i]; } for(i=0;i<X.size();i++) { replaceSeg(X[i], A[i], V[i]); total -= ans[X[i]]; ans[X[i]] = (X[i]>=1) ? querySeg(0, X[i]-1, V[i]) : 0; total += ans[X[i]]; A[i] = V[i]; cout << total << endl; } }

Compilation message (stderr)

bubblesort2.cpp: In function 'std::vector<int> countScans(std::vector<int>, std::vector<int>, std::vector<int>)':
bubblesort2.cpp:119:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  119 |     for(i=0; i<A.size();i++) {
      |              ~^~~~~~~~~
bubblesort2.cpp:122:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  122 |     for(i=0; i<A.size();i++) {
      |              ~^~~~~~~~~
bubblesort2.cpp:127:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  127 |     for(i=0;i<X.size();i++) {
      |             ~^~~~~~~~~
bubblesort2.cpp:112:12: warning: unused variable 'j' [-Wunused-variable]
  112 |     int i, j, k;
      |            ^
bubblesort2.cpp:112:15: warning: unused variable 'k' [-Wunused-variable]
  112 |     int i, j, k;
      |               ^
bubblesort2.cpp:136:1: warning: no return statement in function returning non-void [-Wreturn-type]
  136 | }
      | ^
bubblesort2.cpp: In function 'void setIO(std::string)':
bubblesort2.cpp:53:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   53 |     freopen((name+".in").c_str(),"r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bubblesort2.cpp:54:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   54 |     freopen((name+".out").c_str(),"w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...